一、跳台阶题目
1. 一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
分析:从题目中可以看出青蛙每次跳到台阶有两种情况:一次跳1级和一次跳2级。
1.假设青蛙第一次跳了1级,那么剩下的n-1级则有f(n-1)种跳法;
2..假设青蛙第一次跳了2级,那么剩下的n-2级则有f(n-2)种跳法;
3.在台阶数为1的时候有1中跳法,台阶数为2时有两种跳法;
4.综合1、2来看总的跳法有f(n)=f(n-1)+f(n-2);
从这个式子看出时非彼拉切数列,所以
public static int f(int n) { if (n==0){ return 0; }else if (n==1){ return 1; }else if (n==2){ return 2; }else { return f(n-1)+f(n-2); }f }
2.一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
分析:1.有题中可以看出青蛙每次可以跳的台阶数为1、2、3.......n;
2.假设台阶为1时,f(1)=1;
假设台阶为2时,f(2)=f(2-1)+f(2-2); (第一次跳一阶或者第一次跳两阶);
假设台阶为2时,f(3)=f(3-1)+f(3-2)+f(3-3);
.
.
假设台阶为n-1时,f(n-1)=f((n-1)-1)+f((n-1)-2)+........f((n-1)-(n-1))=f(n-2)+f(n-3)+......................+f(1)+f(0);
假设台阶为n-1时, f(n)=f(n-1)+......................+f(2)+f(1)+f(0);
3.综上可得出,跳n阶的台阶的方法有:
f(n)=f(n-1)+......................+f(2)+f(1)+f(0);
把f(n-1)带到f(n)中可得到 : f(n)=f(n-1)+f(n-1)=2*f(n-1)
| 0 ,(n=0)
f(n) = | 1 ,(n=1)
| 2*f(n-1) ,(n>1)
public static int f(int n) { if (n==0){ return 0; }else if (n==1){ return 1; } else { return 2*f(n-1); } }