第39級台階
小明剛剛看完電影《第39級台階》,離開電影院的時候,他數了數禮堂前的台階數,恰好是39級!
站在台階前,他突然又想著乙個問題:
如果我每一步只能邁上1個或2個台階。先邁左腳,然後左右交替,最後一步是邁右腳,也就是說一共要走偶數步。那麼,上完39級台階,有多少種不同的上法呢?
請你利用計算機的優勢,幫助小明尋找答案。
題目分析:
1.多種情況使用遞迴的方式
2.解決減過多的問題,設定結點:當小於0,直接return上一層
3.最後的結點,當階梯走完,驗證偶數步才++,否者還是需要return上一層
4.兩種情況交融配合的方式,將一階和二階寫在一起
方法2public static void walk(int sta, int step)
if(sta==0)
return;
}walk(sta-1,step+1);
walk(sta-2,step+1);
}
解題思路:一開始我直接想用斐波那契數列算第39項,再除以2,但是39項並不是偶數,說明是左腳踏上39階,還是右腳踏上39階的方案數是不相等,其實他們本來也不對稱。後來我通過定義乙個二維陣列arr[a][b](b=0,1)來解決左右腳問題,arr[a][b]的含義分為arr[a][0] 左腳踏上第a階的方案數,arr[a][1]為右腳踏上第a階的方案數,所以可以推得以下等式:
arr[a][0] = arr[a-1][1] + arr[a-2][1]
arr[a][1] = arr[a-1][0] + arr[a-2][0]
#include
using
namespace std;
long
long arr[40]
[2];
intmain()
cout << arr[39]
[1];
return0;
}
第39級台階
小明剛剛看完電影 第39級台階 離開電影院的時候,他數了數禮堂前的台階數,恰好是39級 站在台階前,他突然又想著乙個問題 如果我每一步只能邁上1個或2個台階。先邁左腳,然後左右交替,最後一步是邁右腳,也就是說一共要走偶數步。那麼,上完39級台階,有多少種不同的上法呢?請你利用計算機的優勢,幫助小明尋...
第39級台階
畫個圖,找個遞迴出口,應該不難。小明剛剛看完電影 第39級台階 離開電影院的時候,他數了數禮堂前的台階數,恰好是39級 站在台階前,他突然又想著乙個問題 如果我每一步只能邁上1個或2個台階。先邁左腳,然後左右交替,最後一步是邁右腳,也就是說一共要走偶數步。那麼,上完39級台階,有多少種不同的上法呢?...
第39級台階
小明剛剛看完電影 第39級台階 離開電影院的時候,他數了數禮堂前的台階數,恰好是39級 站在台階前,他突然又想著乙個問題 如果我每一步只能邁上1個或2個台階。先邁左腳,然後左右交替,最後一步是邁右腳,也就是說一共要走偶數步。那麼,上完39級台階,有多少種不同的上法呢?請你利用計算機的優勢,幫助小明尋...