概述
《剑指offer》面试题10(关于青蛙跳台阶之斐波那契数列)扩展问题:
我们知道,当青蛙一次只能跳一阶或者两阶的时候,我们可以把问题转换为斐波那契数列用递归或者非递归的形式予以计算,但是,若青蛙一次能跳的阶数在n阶以内(包括n阶)时,又该如何计算呢?
题目:
在青蛙跳台阶的问题中,如果把条件改成:一只青蛙一次可以跳上1级台阶,也可以跳上2级…也可以跳上n级,此时该青蛙跳上一个n级的台阶总共有多少种跳法?
思路:
如果青蛙选择第一次跳1阶,那么接下来最多只能跳n-1阶,也就最多能有n-1种跳法,如果青蛙选择第一次跳2阶,那么接下来最多只能跳n-2阶,也就最多能有n-2种跳法,…,依次类推如果青蛙选择第一次跳n-1阶,那么接下来最多只能跳1阶,也就最多能有1种跳法,所以,设该青蛙跳上一个n级的台阶总共有f(n)种跳法,则f(n)= f(n-1)+ f(n-2)+ f(n-3)+ … + f(1)。而f(n-1)= f(n-2)+ f(n-3)+ f(n-4)+…+ f(1)。两式相减得f(n)= 2 * f(n-1)= 2 * 2 * f(n-2)=2 * 2 * 2 * f(n-3)=…=2^(n-1) * f(n-(n-1)) = 2^(n-1) * f(1)= 2^(n-1),代码如下:
/**
* 青蛙能跳n阶以内
* @param args
*/
public int Fibonacci2(int n){
if(n==0)
return 0;
/*if(n==1)
return 1;*/
//2*Fibornacci2(n-1)
return (int) Math.pow(2,n-1);
}
虽说思路比起未扩展更难,但是代码反而更加精练,有问题欢迎提出,谢谢!!
最后
以上就是要减肥牛排为你收集整理的青蛙跳台阶扩展问题(斐波那契数列问题)的全部内容,希望文章能够帮你解决青蛙跳台阶扩展问题(斐波那契数列问题)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复