变态跳台阶

题目描述:一只青蛙一次可以跳上一个台阶,也可以跳上两级....他也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法?

时间限制:1秒

空间限制:32768K

思路分析:这道题考察了递归的思想方法。

A.第一种,我们可以从第一次跳的台阶数来分析

当n=0、n=1时,毫无疑问,有一种跳法

当n>=2时:

假定第一次跳一个台阶,则剩余n-1个台阶,有f(n-1)种跳法,共有:f()

假定第一次跳两个台阶,则剩余n-2个台阶,有f(n-2)种跳法

......

假定第一次跳(n-1)个台阶,则剩余1个台阶,有f(1)种跳法

假定第一次跳n个台阶,则剩余0个台阶,有1种跳法

所以 f(n)=f(n-1)+f(n-2)+...+f(1)+f(0)——①

f(n-1)=       f(n-2)+...+f(1)+f(0)——②

用①减去②得:f(n)=2*f(n-1)

综上所述:f(n)={1,n=0;1,n=1;2*f(n-1),n>=2}

B.第二种,我们可以从台阶数有多少来分析

假设有1个台阶,有一种跳法,f(1)=1

假设有2个台阶,有两种跳法,f(2)=f(2-1)+f(2-2)

假设有3个台阶,有三种跳法,f(3)=f(3-1)+f(3-2)+f(3-3)

......

假设有n个台阶,有n种跳法,f(n)=f(n-1)+f(n-2)+f(n-3)+...+f(n-(n-1))+f(n-n)

同理:f(n)=2*f(n-1)

综上所述:f(n)={1,n=0;1,n=1;2*f(n-1),n>=2}

C.每一个台阶都有跳与不跳两种情况,最后一个台阶必须跳,所以,共有2^(n-1)种情况

C++语言代码

class Solution {
public:
    int jumpFloorII(int number) {
        if(number<=0)
            return -1;
        else if(number==1)
        {
            return number;
        }
        else
        {
            return 2*jumpFloorII(number-1);
        }
    }
};



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值