青蛙跳台阶的问题
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
首先我们先写出来前几步,找找规律试试。
f(1) = 1;
f(2) = 2;
f(3) = 3;
f(4) = 5;
f(5) = 8;
不难看出 当n = 1或 2 时 是一个固定的数值,当n >= 3时,f(n) = f(n-1)+f(n-2)
所以 不难写出递归的部分的代码。
int Result(int n)
{
if(n==1)
return 1;
if(n==2)
return 2;
return Result(n-1)+Result(n-2);
}
强化题:
如果说,青蛙可以跳任意x阶(x<=n),那么有多少种方法?
同上题一样,写出来看看(因为是一个递归的问题,所以我习惯写写试试╮(╯▽╰)╭,大佬勿喷~~~~)
f(1) = 1; f(2) = 2; f(3) = 4; f(4) = 8; f(5) = 16;
显而易见,f(n) = 2^(n-1);
然而我看到了另一种数学方法:
f(n) = f(n-1)+…+f(2)+f(1);
f(n-1) = f(n-2)+…+f(2)+f(1);
一式减二式得到:f(n) = 2*f(n-1);
故递归就可解决问题,代码如下:
int Result(int n)
{
if(n==1)
return 1;
else
return 2*Result(n-1);
}
因为今天早8点一直上到晚上十点的课,没机会去找一些特别不熟悉的题,这个是最近上算法课写的,简单的问题,今天就当再次思考一遍吧?。(第二天)