階段を登る(c++再帰)

3339 ワード

木の先生が階段を登ることを説明して、彼は毎回1級あるいは2級を歩くことができて、階段の級数を入力して、異なる歩き方の数を求めます:階段は全部で3級があって、彼は毎回すべて1級を歩くことができて、あるいは第1回は1級を歩いて、第2回は2級を歩くことができて、第2回は1級を歩いて、全部で3種類の方法です.
入力入力はいくつかの行を含み、各行は正の整数Nを含み、階段級数を表し、1<=N<=30は異なる走法数を出力し、各行入力は1行の出力に対応する
サンプル入力5 8 10サンプル出力8 34 89
最初にこの問題を見て、まず私が思いついたのは列挙で、1と2で始まる様々な答えを列挙しますが、再帰的な方法では実現しにくいので、1と2で始まる方法を求めることを思いつきました.
コードは次のとおりです.
#include 
using namespace std;
int walk(int n)
{
    if(n==1)
        return 1;
    else if(n==2)
        return 2;
    else
        return walk(n-1)+walk(n-2);
}

int main()
{
    int n;
    int m=1;
    while (cin >>n)
    {
        cout<<walk(n)<<endl;
    }
    return 0;
}