C++基础知识(五)斐波拉契数列、跳台阶问题

#include <iostream>

using namespace std;

int Fibonacci(int n) {
    /*斐波拉契数列问题-递归*/
    //if(n==0)return 0;
    //if(n==1)return 1;
    //else return ( Fibonacci(n-1) + Fibonacci(n-2) );
    /*斐波拉契数列问题-循坏*/
    int result=1;
    int pre_result=0;
    if(n==0) {result=0;}
    if(n==1) {result=1;}
    while(n>1){
        int temp=result;
        result += pre_result;
        pre_result = temp;
        n--;
    }
    return result;
}

int jumpFloor(int number) {
    /*跳台阶问题-递归*/
    //if(number<0)return 0;
    //if(number==0)return 1;
    //if(number==1)return 1;
    //else return (jumpFloor(number-1) + jumpFloor(number-2));
    /*跳台阶问题-循坏*/
    int way=1;
    int pre_way=1;
    if(number<0)way=0;
    if(number==0)way=1;
    if(number==1)way=1;
    while(number>=2){
        int temp=way;
        way += pre_way;
        pre_way = temp;
        number--;
    }
    return way;
}


int jumpFloorII(int number) {
    /*变态跳台阶问题-递归*/
    //if(number<0)return 0;
    //if(number==0 || number==1)return 1;
    //int ways=0;
    //while(number > 0){
        //number--;
        //ways += jumpFloorII(number);
    //}
    /*变态跳台阶问题-(数学分析)*/
    if(number<0)return 0;
    if(number==0 || number==1)return 1;
    return  1<<(number-1);
}
int rectCover(int number) {
    /*格子填充问题*/
    if(number==0)return 0;
    else if(number==1)return 1;
    else if(number==2)return 2;
    /*递归*/
    // else return rectCover(number-1) + rectCover(number-2);
    /*循环*/
    else{
        int ways = 2;
        int pre_ways=1;
        while(number-->2){
            int temp=ways;
            ways += pre_ways; // f(n)=f(n-1)+f(n-m), m is the rows
            pre_ways = temp;
        }
        return ways;
    }
}

int main()
{
    cout << Fibonacci(5)<<endl;
    cout << jumpFloor(3)<< endl;
    cout << jumpFloorII(4)<<endl;
    cout << rectCover(4)<<endl;
    return 0;
}

 

转载于:https://www.cnblogs.com/chuckle/p/9010910.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值