您的位置:首页 > 职场人生

面试题9:斐波那契数列

2017-12-27 14:32 155 查看
题目:现在要求输入一个整数n,请你输出斐波那契数列的第n项。

斐波那契数列定义:f(n)=f(n-1)+f(n-2) n>1

                                 f(n)=0  n=0

                                 f(n)=1 n=1

求解:

1.递归求解

public static long fibonacci(int n) {
if(n==0) return 0;
if(n==1) return 1;
return fibonacci(n-1)+fibonacci(n-2);
}
递归效率较差,很多计算时重复的。

2.动态规划,从下往上计算,依次计算f(2)、f(3)...到f(n)

public static long fibonacci_long(int n) {
if(n==0) return 0;
if(n==1) return 1;
int fibNMinusOne=1;
int fibNMinusTwo=0;
int fibN=0;
for(int i=2;i<=n;i++) {
fibN=fibNMinusOne+fibNMinusTwo;
fibNMinusTwo=fibNMinusOne;
fibNMinusOne=fibN;
}
return fibN;
}


拓展题:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。

思路:n级的跳法为f(n),跳到n级要么跳两级要么跳一级跳了两次,因此f(n)=f(n-1)+f(n-2)

           n=1 f(n)=1 ,n=2 f(n)=2

java实现:

public int JumpFloor(int target) {
if(target<=0) return 0;
if(target==1) return 1;
if(target==2) return 2;
int fibNMinusOne=2;
int fibNMinusTwo=1;
int fibN=0;
for(int i=3;i<=target;i++) {
fibN=fibNMinusOne+fibNMinusTwo;
fibNMinusTwo=fibNMinusOne;
fibNMinusOne=fibN;
}
return fibN;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  动态规划