题目:
要求输入一个整数n,请你输出斐波那契数列的第n项。
如下:
输入:
一个正整数n
输出:
斐波那契数列的第n项
解题思路:
有两种,是通过递归来实现,这种方法最大坏处是在于很多地方是重复计算的,所以,我们可以考虑从下往上来实现这个函数
-
public static void main(String[] args) { // TODO Auto-generated method stub System.out.println(Fibonacci(10)); } //斐波那契数列 //10 9 8 7 8 7 6 static int Fibonacci(int n){ if(n<2) return n; //fibnum1=(n-1),fibnum2=(n-2),fib=(fibnum1+fibnum2) int fibnum1=0,fibnum2=1,fibn=0; for(int i=0;i<n;++i){ fibn=fibnum1+fibnum2; fibnum2=fibnum1; fibnum1=fibn; } return fibn; }
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
解题思路:
1只青蛙 1
2只青蛙 2(1,1)(2)
3只青蛙 3(1,1,1)(1,2)(2,1)
4只青蛙 5(1,1,1,1)(1,2,1)(2,1,1)(1,1,2) (2,2)
5只青蛙 8(1,1,1,1,1)(1,1,1,2)(1,2,1,1)(1,1,2,1)(1,1,1,2)(1,2,2)(2,1,2)(2,2,1)
不难分析出,N级台阶等于f(n-1)+f(n-2),所以代码也和前面的代码如出一撤
public int fibonacci_recursion(int n){
//健壮性判断
if(n<0){
System.out.println("n不能小于0");
return 0;
}
if(n==0 || n==1)
return n;
//a1用于存储fibonacci(n-2),a2用于存储fibonacci(n-1),a3用于存储fibonacci(n)
int a1=0,a2=1,a3=1;
for(int i=0;i<n-1;i++){
a3 = a1+a2;
a1 = a2;
a2 = a3;
}
return a3;
}