面试题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.递归求解
2.动态规划,从下往上计算,依次计算f(2)、f(3)...到f(n)
拓展题:一只青蛙一次可以跳上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;
}
斐波那契数列定义: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;
}
相关文章推荐
- 《剑指offer》【面试题九:斐波那契数列】
- PHP实现斐波那契数列 (面试题-笔记)
- 面试题9 斐波那契数列
- 【剑指offer】面试题10:斐波那契数列
- C面试题之斐波那契数列
- 【剑指offer】面试题九:斐波那契数列
- 面试题9. 斐波那契数列
- 剑指Offer系列-面试题9:斐波那契数列
- 剑指offer-面试题9:斐波那契数列
- 面试题整理-斐波那契数列
- 剑指offer面试题 斐波那契数列
- 【面试题九】斐波那契数列
- 剑指Offer(第二版)面试题10:斐波那契数列
- 面试题9:斐波那契数列
- 《剑指offer》面试题10:斐波那契数列(含矩阵乘法解法)
- 面试题9:斐波那契数列
- 剑指offer 面试题9:斐波那契数列
- 【面试题9】斐波那契数列
- 剑指offer--面试题9:斐波那契数列--Java实现
- 剑指offer面试题9 斐波那契数列及青蛙跳台阶问题