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臺階,步數爲偶數步。
*/