[剑指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;
}
目录
相关文章
|
4月前
|
机器学习/深度学习 Java
【剑指offer】- 求1+2+3+...+n -47/67
【剑指offer】- 求1+2+3+...+n -47/67
|
2天前
剑指Offer(第二版)03
剑指Offer(第二版)03
9 0
|
2天前
剑指Offer(第二版)10-2
剑指Offer(第二版)10-2
3 0
|
2天前
剑指Offer(第二版)04
剑指Offer(第二版)04
7 0
|
2天前
剑指Offer(第二版)11
剑指Offer(第二版)11
9 0
|
2天前
剑指Offer(第二版)06
剑指Offer(第二版)06
10 0
|
2天前
剑指Offer(第二版)05
剑指Offer(第二版)05
7 0
|
算法
剑指offer(26-33题)详解
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向
87 0
剑指offer(26-33题)详解
|
API
剑指offer(41-50题)详解
小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!
82 0
剑指offer(41-50题)详解
|
BI Go 容器
剑指offer(51-59题)详解
思路: 这题刚开始还没想到,刚开始还想着用啥位运算?刚开始想着怎么用总数变成对应的数,但是人家要求不能用除法。得用乘法。(不要按照公式每个每个的死算,这样太低效)。其实把上面等式右侧看成两部分就行了。A[0]*A[1]*...*A[i-1]和A[i+1]*...*A[n-1]。
56 0
剑指offer(51-59题)详解