一、题目描述
大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。
二、解题思路
可以用递归的解法,也可以用非递归的解法
三、Java代码实现
//递归实现
public int Fibonacci(int n) {
if(n==0) return 0;
if(n==1) return 1;
return Fibonacci(n-1)+Fibonacci(n-2);
}
//非递归实现
public int Fibonacci(int n) {
if(n==0) return 0;
if(n==1) return 1;
int a = 0;
int b = 1;
for(int i = 2; i <= n; i++){
int sum = a + b;
a = b;
b = sum;
}
return b;
}
四、题目扩展
1、跳台阶问题
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
f(1)=1;
f(2)=2;
f(n)=f(n-1)+f(n-2); n>=3
2、变态跳台阶
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
可以用数学归纳法证明出f(n)=2^(n-1)。
public int JumpFloorII(int target) {
if(target == 1) return 1;
int sum = 1;
for(int i = 2; i <= target; i++)
sum = sum << 1;
return sum;
}
3、矩阵覆盖
我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
f(1)=1;
f(2)=2;
f(n)=f(n-1)+f(n-2);