39级台阶问题

39级台阶问题

小明看完电影《第39级台阶》,离开电影院的时候,他数了数视觉的台阶数,恰好是39级。
站在台阶前,他突然又想起一个问题:如果我每一步只能迈上1个或2个台阶,先迈左脚,然后左右交替,最后一步迈右脚,也就是说一共要迈偶数步。那么,上完39级台阶,有多少种不同的上法呢?
请利用计算机的优势,帮助小明寻找答案。

#include<stdio.h>

int count=0;        //记录有多少种
int foot=0;     //记录走的步数

void backtrack(int t)   //传值:走的台阶数
{
    if(t==39 && foot%2==0)      //条件:上完39级台阶,一共要迈偶数步
    {
        count++;        //增加一种方法
        return;
    }

    foot++;     //一步走一个台阶的情况
    t++;
    if(39>=t)   //减枝
        backtrack(t);
    t--;
    foot--;

    foot++;     //一步走一个台阶的情况
    t+=2;
    if(39>=t)   //减枝
        backtrack(t);
    t-=2;
    foot--;
}

int main()
{
    backtrack(0);
    printf("一共有%d种方法。\n",count);
    return 0;
}

/*
思路:
  回溯一步走一个台阶的情况和一步走一个台阶的情况。
  截止条件:走39台阶,步数为偶数步。
*/
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章