
public static int f(int n) {//参数合法性验证if (n < 1) {System.out.println("参数必须大于1!");System.exit(-1);}if (n == 1 || n == 2) return 1;else return f(n - 1) + f(n - 2);}
public static int fx(int n) {//参数合法性验证if (n < 1) {System.out.println("参数必须大于1!");System.exit(-1);}//n为1或2时候直接返回值if (n< 2) return 1;//n>2时候循环求值int res = 0;int a = 1;int b = 1;for (int i = 2; i <= n; i++) {res = a + b;a = b;b = res;}return res;}
当n = 1 时, 只有一种跳法,即1阶跳:Fib(1) = 1;
当n = 2 时, 有两种跳的方式,一阶跳和二阶跳:Fib(2) = Fib(1) + Fib(0) = 2;
当n = 3 时,有三种跳的方式,第一次跳出一阶后,后面还有Fib(3-1)中跳法; 第一次跳出二阶后,后面还有Fib(3-2)中跳法;第一次跳出三阶后,后面还有Fib(3-3)中跳法
Fib(3) = Fib(2) + Fib(1)+Fib(0)=4;
当n = n 时,共有n种跳的方式,第一次跳出一阶后,后面还有Fib(n-1)中跳法; 第一次跳出二阶后,后面还有Fib(n-2)中跳法..........................第一次跳出n阶后, 后面还有 Fib(n-n)中跳法.
Fib(n) = Fib(n-1)+Fib(n-2)+Fib(n-3)+..........+Fib(n-n)=Fib(0)+Fib(1)+Fib(2)+.......+Fib(n-1)
又因为Fib(n-1)=Fib(0)+Fib(1)+Fib(2)+.......+Fib(n-2)
递归等式如下:

if(number<2)return 1;//n>2时候循环求值int res = 0;int a = 1;for (int i = 2; i <= number; i++) {res = 2*a;a= res;}return res;
原文:http://www.cnblogs.com/zhxshseu/p/5284975.html