您的位置:首页 > Web前端

剑指offer青蛙跳台阶问题

2016-03-16 20:23 711 查看
(1)一只青蛙一次可以跳上 1 级台阶,也可以跳上2 级。求该青蛙跳上一个n 级的台阶总共有多少种跳法。

//递归方式
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);

}

[/code]

//非递归方式
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;

}

[/code]
(2)一只青蛙一次可以跳上1级台阶,也可以跳上2 级……它也可以跳上n 级,此时该青蛙跳上一个n级的台阶总共有多少种跳法? 当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)

两式相减得:Fib(n)-Fib(n-1)=Fib(n-1) =====》 Fib(n) = 2*Fib(n-1) 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;

[/code]

来自为知笔记(Wiz)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: