遞迴就是乙個函式在它的函式體內呼叫它自身。執行遞迴函式將反覆呼叫其自身,每呼叫一次就進入新的一層。遞迴函式必須有結束條件。
當函式在一直遞推,直到遇到牆後返回,這個牆就是結束條件。
所以遞迴要有兩個要素,結束條件與遞推關係
由該程式,利用遞迴,從2的63次方開始不斷遞減直到x==1,這裡就比較好理解遞迴的特點,遞迴不斷呼叫自己函式
p(63)=pow(2,63)+p(62);
p(62)=pow(2,63)+p(61);
…p(2)=pow(2,1)+p(1)
當p(1)的時候返回1;
注意此時並不是直接返回,這裡是遞迴和迭代的不同之處,迭代是不斷地連續進行,直到迴圈結束輸出結果,而遞迴是先呼叫自己函式找到迴圈結尾,再從結尾的結果不斷賦值直到最開始的遞迴的入口。
這其中也可以利用採用讓另乙個變數是不斷的乘以2,不過這裡得注意因為變數n是2的x次方,這裡要注意資料溢位問題,因為整型資料是達不到2的63次方這麼多位數的,所以得採用double型。
這個和剛剛那個方法比較:這個方法儲存資料得占用較大的記憶體,而執行結果較快,另乙個直接呼叫math函式庫裡的pow不佔記憶體,不過執行時間比那個方法長。
這個最常規的方法是直接利用for語句迴圈得到結果,或者利用等比數列求和的方法得到結果都較為簡便。這裡是想換一種思路,利用遞迴來實現,希望可以有利於大家理解遞迴函式。
關於Python函式遞迴深度的問題
最近在做python函式練習的時候出現了乙個問題,遞迴超過997時python直譯器會報錯,具體 如下 def fact n if n 0 return 1 else return n fact n 1 print fact 998 報錯截圖 修改後問題解決,setrecursionlimit的引數...
python 中關於遞迴函式的理解
def digui n if n 1 設定乙個出口用於當條件滿足時結束,避免死迴圈 return 1 else result n digui n 1 print digui 5 結果是5 digui 4 5 4 digui 3 5 4 3 digui 2 5 4 3 2 digui 1 120 當n...
關於Python 函式遞迴中的 sin之舞
最近fj為他的奶牛們開設了數學分析課,fj知道若要學好這門課,必須有乙個好的三角函式基本功。所以他準備和奶牛們做乙個 sine之舞 的遊戲,寓教於樂,提高奶牛們的計算能力。不妨設 an sin 1 sin 2 sin 3 sin 4 sin n sn a1 n a2 n 1 a3 2 an 1 fj...