問題分析: 看到這個問題首先想到的遞迴 定義乙個方法 int f( int n ) 不考慮其具體實現 我們令其可以實現返回這道題的解
; 繼續分析這道題的解集,有一點是可以確定的: 在解集中小明跨出的第一步有兩種情況①第一步跨越兩個階梯②第一步跨越乙個階梯 那麼 問題的規模得以減小 我們很容易得到公式: f(n)=f(n-1)+f(n-2)
接下來考慮遞迴的出口問題:
當n=0這個問題不能被分解(原子問題)並得到乙個解則 return 1;
當n<0這個問題無解則 return 0 .
可得到以下遞迴函式:
int f(int n)
if(n<=0)
return f(n-1)+f(n-2);
}
目前為止我們並沒有將偶數步的要求考慮在內, 要在遞迴函式內解決這個問題顯然f( ) 僅有乙個引數是不夠的 思考之後可以增加乙個boolean型別的引數mark 表示步數的奇偶
每走一步(每一次遞迴呼叫)就將mark的值取反 我這裡設定mark的初始值為false 那麼顯然就要求當n==0且mark=false時 我們就尋找到了問題的乙個解 return 1, 否者 return 0 ;
所以 改進後的方法 f () 為:
int f(int n,boolean mark)
if(n<=0)
return f(n-1,!mark)+f(n-2,!mark);
}
附上原始碼:
此遞迴的執行過程類似於二叉樹的先序遍歷 下圖是**部落格:
藍橋杯 39階梯
1 題目描述23 4 站在台階前,他突然又想著乙個問題 如果我每一步只能邁上1個或2個台階。先邁左腳,然後左右交替,最後一步是邁右腳,5 也就是說一共要走偶數步。那麼,上完39級台階,有多少種不同的上法呢?6 請你利用計算機的優勢,幫助小明尋找答案。要求提交的是乙個整數。注意 不要提交解答過程,或其...
藍橋 第39階樓梯
小明剛剛看完電影 第39級台階 離開電影院的時候,他數了數禮堂前的台階數,恰好是39級 站在台階前,他突然又想著乙個問題 如果我每一步只能邁上1個或2個台階。先邁左腳,然後左右交替,最後一步是邁右腳,也就是說一共要走偶數步。那麼,上完39級台階,有多少種不同的上法呢?請你利用計算機的優勢,幫助小明尋...
藍橋杯 第39級台階
小明剛剛看完電影 第39級台階 離開電影院的時候,他數了數禮堂前的台階數,恰好是39級 站在台階前,他突然又想著乙個問題 如果我每一步只能邁上1個或2個台階。先邁左腳,然後左右交替,最後一步是邁右腳,也就是說一共要走偶數步。那麼,上完39級台階,有多少種不同的上法呢?請你利用計算機的優勢,幫助小明尋...