一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。--剑指offer(C++)

题目: 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
在做这个问题之前,让我们看看简化版题目的做法。
简化版题目: 一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
分析: 对于这样的问题,采用递归求解是最佳方法。通过分析很容易得到下表。

台阶数n 跳法
0 0
1 1
2 2
3 3
4 5
n ?

表1
分析表1,我们可以得到如下规律:(设method[n]表示台阶数为n的跳法和)

method[n]=method[n-1]+method[n-2];

简化版代码如下;

int jumpFloor(int number)
 {
    if(number==0)
        return 0;
    else if(number==1)
        return 1;
    else if(number==2)
        return 2;
    else
    {
        return jumpFloor(number-1)+jumpFloor(number-2);
    }
}

接下来,我们来看原题:
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。

台阶数n 跳法
0 0
1 1
2 2
3 4
4 8
5 16
n ?

表2
一样去总结规律:((设method[n]表示台阶数为n的跳法和))

method[n]=method[n-1]+method[n-2]+...+method[1]+method[1]+1;

代码如下:

int jumpFloorII(int number)
 {
        if(number==0)
            return 0;
        else if(number==1)
            return 1;
        else
        {
            int x=0;
            for(int i=1;i<number;i++)
            {
                x+=jumpFloorII(i);
            }
            return x+1;
        }
}

猜你喜欢

转载自blog.csdn.net/qq_41789960/article/details/106201166