[剑指Offer]2.变态跳台阶

简介:

题目

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

思路

用Fib(n)表示青蛙跳上n阶台阶的跳法数,设定Fib(0) = 1;

当n = 1 时, 只有一种跳法,即1阶跳,即Fib(1) = 1;

当n = 2 时, 有两种跳的方式,一阶跳和二阶跳,即Fib(2) = Fib(1) + Fib(0) = 2;

当n = 3 时,有三种跳的方式,第一次跳出一阶台阶后,后面还有Fib(3-1)中跳法,第一次跳出二阶台阶后,后面还有Fib(3-2)中跳法,第一次跳出三阶台阶后,后面还有Fib(3-3)中跳法,即Fib(3) = Fib(2) + Fib(1)+Fib(0)=4;

当n = n 时,共有n种跳的方式,第一次跳出一阶台阶后,后面还有Fib(n-1)中跳法, 第一次跳出二阶台阶后,后面还有Fib(n-2)中跳法……………………..第一次跳出n阶台阶后,后面还有 Fib(n-n)中跳法,即Fib(n) = Fib(n-1)+Fib(n-2)+Fib(n-3)+……….+Fib(n-n)=Fib(0)+Fib(1)+Fib(2)+…….+Fib(n-1)又因为Fib(n-1)=Fib(0)+Fib(1)+Fib(2)+…….+Fib(n-2)故Fib(n) = 2*Fib(n-1) n >= 2

综上所述:
这里写图片描述

代码

/*---------------------------------------
*   日期:2015-07-19
*   作者:SJF0115
*   题目: 2.变态跳台阶
*   网址:http://www.nowcoder.com/books/coding-interviews/22243d016f6b47f2a6928b4313c85387?rp=1
*   结果:AC
*   来源:剑指Offer
*   博客:
-----------------------------------------*/
#include <iostream>
using namespace std;

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

int main(){
    Solution s;
    int number = 5;
    cout<<s.jumpFloorII(number)<<endl;
    return 0;
}
目录
相关文章
|
8月前
|
机器学习/深度学习 Java
【剑指offer】- 求1+2+3+...+n -47/67
【剑指offer】- 求1+2+3+...+n -47/67
|
8月前
剑指Offer(第二版)03
剑指Offer(第二版)03
30 0
|
8月前
剑指Offer(第二版)11
剑指Offer(第二版)11
40 0
|
8月前
剑指Offer(第二版)10-2
剑指Offer(第二版)10-2
42 0
|
8月前
剑指Offer(第二版)05
剑指Offer(第二版)05
36 0
|
8月前
剑指Offer(第二版)04
剑指Offer(第二版)04
25 0
【剑指offer】-变态跳台阶-09/67
【剑指offer】-变态跳台阶-09/67
剑指offer 72. 求1+2+…+n
剑指offer 72. 求1+2+…+n
85 0
|
算法
剑指offer(26-33题)详解
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向
109 0
剑指offer(26-33题)详解
|
存储 Java
剑指offer(11-25题)详解
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。。
137 0
剑指offer(11-25题)详解