遞迴 39級台階 出棧順序

2021-08-16 21:35:55 字數 1143 閱讀 8122

39級台階

小明剛剛看完電影《第39級台階》。離開電影院的時候,他數了數禮堂前的台階數,恰好是39級!

站在台階前,他突然又想著乙個問題:

如果我每一步只能邁上1個或2個台階。先邁左腳,然後左右交替,最後一步是邁右腳,也就是說一共要走偶數步。那麼,上完39級台階,有多少種不同的上法呢?

請你利用計算機的優勢,幫助小明尋找答案。

#include

#include

using namespace std;

int n,s;

int f(int q,int t)

if(q>0)t++;  //有台階可走

if(q>=2) return f(q-1,t)+f(q-2,t);  //選擇走一步或者走兩步

if(t%2==0)  s++;   //q=0,1共走偶數步,方法加1

return 0;

int main()

while(scanf("%d",&n)!=eof){

s=0;

f(n,0);

printf("%d\n",s);

return 0;

出棧順序

x星球特別講究秩序,所有道路都是單行線。

乙個甲殼蟲車隊,共16輛車,按照編號先後發車,夾在其它車流中,緩緩前行。

路邊有個死胡同,只能容一輛車通過,是臨時的檢查站,如圖所示。

x星球太死板,要求每輛路過的車必須進入檢查站,也可能不檢查就放行,也可能仔細檢查。

如果車輛進入檢查站和離開的次序可以任意交錯。那麼,該車隊再次上路後,可能的次序有多少種?

為了方便起見,假設檢查站可容納任意數量的汽車。

顯然,如果車隊只有1輛車,可能次序1種;2輛車可能次序2種;3輛車可能次序5種。

#include

int f(int n,int m)

if(n==0)

return 1;

if(m==0)

return f(n-1,1);

return

f(n,m-1)+f(n-1,m+1);

int main()

int a;

while(scanf("%d",&a)!=eof){

printf("%d\n",f(a,0));

return 0;

遞迴 第39級台階

小明剛剛看完電影 第39級台階 離開電影院的時候,他數了數禮堂前的台階數,恰好是39級!站在台階前,他突然又想著乙個問題 如果我每一步只能邁上1個或2個台階。先邁左腳,然後左右交替,最後一步是邁右腳,也就是說一共要走偶數步。那麼,上完39級台階,有多少種不同的上法呢?請你利用計算機的優勢,幫助小明尋...

第39級台階問題(遞迴演算法)

小明剛剛看完電影 第39級台階 離開電影院的時候,他數了數禮堂前的台階數,恰好是39級 站在台階前,他突然又想著乙個問題 如果我每一步只能邁上1個或2個台階。先邁左腳,然後左右交替,最後一步是邁右腳,也就是說一共要走偶數步。那麼,上完39級台階,有多少種不同的上法呢?請你利用計算機的優勢,幫助小明尋...

演算法訓練 第39級台階(遞迴)

小明剛剛看完電影 第 39 級台階 離開電影院的時候,他數了數禮堂前的台階數,恰好是 39 級!站在台階前,他突然又想著乙個問題 如果我每一步只能邁上 1 個或 2 個台階。先邁左腳,然後左右交替,最後一步是邁右腳,也就是說一共要走偶數步。那麼,上完 39 級台階,有多少種不同的上法呢?請你利用計算...