1. 程式人生 > >遞迴和遞推解決爬樓梯問題

遞迴和遞推解決爬樓梯問題

題目:樓梯一次可以爬1級,也可以爬2級,有N級樓梯,有多少種走法?

看到此題首先找出規律

1 走到第1級,有1種方法

2 走到第2級,有2種方法

3 走到第3級,有3種方法

4 走到第4級,有5種方法

5 走到第5級,有8種方法

以此類推,後面的總等於前面兩級方法之和,現在使用遞迴和遞推兩種方法解決本問題

利用遞迴實現

#include <stdio.h>

int climb(int pos)
{
    if(1 == pos)
        return 1;
    else if(2 == pos)
        return 2;
    else
        return (climb(pos-1)+climb(pos-2));
}

int main()
{
    int stair = 0;
    printf("Please Input:");
    scanf("%d", &stair);
    printf("Result:%d\n", climb(stair));
    return 0;      
}

利用遞推實現,編譯時注意要加上 -std=c99

#include <stdio.h>

int main()
{
    int size;
    printf("Please Input:");
    scanf("%d", &size);
    int stair[size];
    stair[0] = 1;
    stair[1] = 2;
    for(int i=2; i<size; i++)
    {
        stair[i] = stair[i-1]+stair[i-2];
    }
    printf("Result:%d\n", stair[size-1]);
    return 0;      
}