青蛙跳台阶(斐波那契数列)

原创 2018年04月17日 17:36:42

题目:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。

思路一:递归

int JumpFloor(int n) {
    if(n==1)
            return 1;
        else if(n==2)
            return 2;
        return JumpFloor(n-1)+JumpFloor(n-2);
    }
代码看似很简洁,实际上运行效果很低效,因为子问题大规模重合,导致非常多的重复计算。

思路二:动态规划

对思路一的递归进行优化,引入一个记录memo,凡是计算过的子问题直接存入memo,下次计算时直接读取。

int JumpFloor(int n) {
        vector<int> memo(n+1);//vector会自动初始化为0
        return anx(n,memo);
    }
    int anx(int n,vector<int>& memo){
        if(n==1) return 1;
        if(n==2) return 2;
        if(memo[n]!=0) return memo[n]; //memo中已有的子问题,直接读取答案
        int ans=anx(n-1,memo)+anx(n-2,memo);
        memo[n]=ans;//memo中没有的子问题,将计算结果存入memo
        return ans;
    }

思路三:循环

int JumpFloor(int n) {
        int pre=0,res=1,tmp;
        while(n--){
            tmp=res;
            res+=pre;
            pre=tmp;
        }
        return res;
    }

该算法既简洁又高效。


三个算法的测试用时(n=40)
算法测试用时(ms)
递归3707
动态规划1
循环0

Recylerview的使用系列教程

-
  • 1970年01月01日 08:00

斐波那契数列及青蛙跳台阶问题

题目1:写一个函数,输入n,求斐波那契(Fibonacci)数列的第n项。 斐波那契(Fibonacci)数列定义如下: f(n)=⎧⎩⎨⎪⎪0,1,f(n−1)+f(n−2),n=0n=1n>2\...
  • u010177286
  • u010177286
  • 2015-07-29 15:51:31
  • 1618

2、斐波那契数列以及青蛙跳台阶

1、写一个函数,输入n,求斐波那契数列的第n项。斐波那契数列的定义如下: 编程书上看到最多的就是递归实现,求100的伪代码描述如下: 输入:n 输出:f(n) 初始化:n的值为10...
  • pang_hailong
  • pang_hailong
  • 2016-08-17 14:08:56
  • 477

斐波拉契数列、汉诺塔,青蛙跳台阶

斐波拉契数列、汉诺塔,青蛙跳台阶  的算法实现 一.斐波那契数列 (1,1,2,3,5,8,13,21,34 ......) f(n)=⎧⎩⎨⎪⎪0,1,f(n−1)+f(...
  • guolalala
  • guolalala
  • 2017-03-20 14:33:34
  • 264

青蛙跳台阶(斐波那契数列应用)

(1)一只青蛙一次可以跳上 1 级台阶,也可以跳上2 级。求该青蛙跳上一个n 级的台阶总共有多少种跳法。 (2)一只青蛙一次可以跳上1级台阶,也可以跳上2 级……它也可以跳上n 级,此时该青蛙跳上一个...
  • chenyiming_1990
  • chenyiming_1990
  • 2013-09-30 12:31:17
  • 1283

C++实现斐波那契数列/青蛙跳台阶

题目:写一个函数,输入n,求斐波那契(Fibonacci)数列的前n项。            斐波那契数列的定义如下:                                        ...
  • u012618247
  • u012618247
  • 2015-09-03 18:49:08
  • 794

剑指offer----青蛙跳台阶的解析与实现

(1)一只青蛙一次可以跳上 1 级台阶,也可以跳上2 级。求该青蛙跳上一个n 级的台阶总共有多少种跳法。 (2)一只青蛙一次可以跳上1级台阶,也可以跳上2 级……它也可以跳上n 级,此时该青蛙跳上一个...
  • snow_7
  • snow_7
  • 2016-06-14 13:08:04
  • 1638

青蛙跳台阶----斐波那契数列

题目要求 一只青蛙一次可以跳上一节台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶共有多少种跳法? 题目分析 看到该题目,首先你可以在纸上画一画,想一想,从一级台阶往后推导,反正我是这么做的,当推导上...
  • chenx_IU
  • chenx_IU
  • 2017-03-18 20:03:55
  • 231

斐波那契数列(青蛙跳台阶)

题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。 #include using namespace std; long long fibonacci(u...
  • szl_lxy
  • szl_lxy
  • 2015-08-21 17:53:09
  • 228

变态青蛙跳台阶的两种典型分析方法

变态青蛙跳台阶的两种典型分析方法: 最近看到递归相关的算法,有个变态青蛙跳台阶的延伸问题还蛮有趣的。题目如下,拿出来分析一下: 方法1:归纳假设法 方法2:直接考虑第n阶的可能方...
  • Cassie327
  • Cassie327
  • 2017-06-29 16:12:47
  • 857
收藏助手
不良信息举报
您举报文章:青蛙跳台阶(斐波那契数列)
举报原因:
原因补充:

(最多只允许输入30个字)