藍橋杯第39階梯的遞迴實現 JAVA

2021-08-17 23:41:57 字數 1178 閱讀 1699

問題分析:  看到這個問題首先想到的遞迴     定義乙個方法 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級台階,有多少種不同的上法呢?請你利用計算機的優勢,幫助小明尋...