昨天在牛客上做了幾個遞迴的題目,分別是斐波那契數列,跳台階,**跳台階,矩形覆蓋,這幾個題實際上是同乙個題。
以下是題目:
1.斐波那契數列
大家都知道斐波那契數列,現在要求輸入乙個整數n,請你輸出斐波那契數列的第n項(從0開始,第0項為0)。n<=39
2.跳台階
乙隻青蛙一次可以跳上1級台階,也可以跳上2級。求該青蛙跳上乙個n級的台階總共有多少種跳法(先後次序不同算不同的結果)。
3.**跳台階
乙隻青蛙一次可以跳上1級台階,也可以跳上2級……它也可以跳上n級。求該青蛙跳上乙個n級的台階總共有多少種跳法。
4.矩形覆蓋
我們可以用2*1的小矩形橫著或者豎著去覆蓋更大的矩形。請問用n個2*1的小矩形無重疊地覆蓋乙個2*n的大矩形,總共有多少種方法?
說白了,都是斐波那契數列的變形,都可以推導出遞推公式。
需要注意的是實現遞迴的方式,第乙個是遞迴函式,第二個是備忘錄方法,第三個是備忘錄方法的變形(減少了需要記住的變數個數)。
使用遞迴函式有些時候會超時。
關於遞迴的思考
之前有接觸過遞迴,看到別人寫的遞迴函式的 好生羨慕,怎麼就能寫這麼好呢?我怎麼就想不到這樣寫呢?如此等等。就拿fibonacci函式來說吧,乙個普通的函式可能這樣寫 def fib n if n 0 return 0 elif n 1 return 1 else return fib n 1 fib...
關於演算法的思考
計算機的出現和發展為人類解決了處理複雜資料時間長且精確度不足的問題,而乙個優秀的演算法可以把計算機處理資料的效率大大提高,作為計算機類專業的學生,我們任務就是把客觀世界的問題在頭腦中抽象化,形成合理的演算法,進而更高效的解決問題。演算法,通俗來講就是解決問題的方法,演算法所要面對的問題是具有一定難度...
F 中關於遞迴的思考
做電腦錢整整幾個小時終於搞懂了f 中的遞迴!終點是要把當前獲得的值,加入到記錄中並且傳遞到下一次的遞迴中。附上一小段f let originlist newlist let rec checkelemet originlist newlist match originlist with head t...