zoukankan      html  css  js  c++  java
  • 面试题:Fibonacci数列

    题目描述:大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。

    方法1:递归

    public class Solution {
        public int Fibonacci(int n) {
            if (n == 0){
                return 0;
            } else if(n == 1){
                return 1;
            } else{
                return Fibonacci(n - 1) + Fibonacci(n - 2);
            }
        }
    }

    方法2:循环

    public class Solution {
        public int Fibonacci(int n) {
            if(n == 0){
                return 0;
            }else if(n == 1){
                return 1;
            }else{
                int a = 0;
                int b = 1;
                int f = 0;
                for(int i=1;i<n;i++){
                    f = a + b;
                    a = b;
                    b = f;
                }
                return f;
            }
        }
    }

    递归是函数调用函数自身,循环是通过初始值和终止条件在一个范围内重复计算

    基于递归实现的函数代码简单,但性能不如基于循环的方法,如果没有别的要求优先使用递归

    递归的缺点是函数的调用有时间和空间的消耗,并且递归中有许多重复的计算

    类似题目:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。

    public class Solution {
        public int JumpFloor(int target) {
            if(target == 0){
                return 0;
            }else if(target == 1){
                return 1;
            }else if(target == 2){
                return 2;
            }else{
                //递归
                //return JumpFloor(target-1)+JumpFloor(target-2);
                //循环
                int a = 1;
                int b = 2;
                int J = 0;
                for(int i=2;i<target;i++){
                    J = a + b;
                    a = b;
                    b = J;
                }
                return J;
            }
        }
    }

    类似题目:一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法(数学归纳法2的n-1次方)。

    public class Solution {
        public int JumpFloorII(int target) {
            return (int)Math.pow(2,(target-1));
        }
    }
  • 相关阅读:
    51nod 1087 1 10 100 1000(找规律+递推+stl)
    51nod 1082 与7无关的数 (打表预处理)
    51 nod 1080 两个数的平方和
    1015 水仙花数(水题)
    51 nod 1003 阶乘后面0的数量
    51nod 1002 数塔取数问题
    51 nod 1001 数组中和等于K的数对
    51 nod 1081 子段求和
    51nod 1134 最长递增子序列 (O(nlogn)算法)
    51nod 1174 区间中最大的数(RMQ)
  • 原文地址:https://www.cnblogs.com/Aaron12/p/9503761.html
Copyright © 2011-2022 走看看