遞迴函式的使用及注意事項

2021-10-02 20:06:37 字數 909 閱讀 3692

分析:

4! = 4 * 3!

3! = 3 * 2!

2! = 2 * 1!

1! = 1

先定義函式,只有當num 為1時,是他本身,所以只有這乙個特例而已,用if寫出來,其餘的情況用else寫。

>>

def rec(num)

:>>

if num ==1:

>>

return

1>>

else

:>>

return num * rec (num -1)

>>result = rec(4)

>>

print

(result)

24

不知道else後怎麼寫,怎麼辦? :

函寫到數第五行的時候,可以用2!來舉特例。2! = 2 * 1!

先寫成:

return 2 * rec(1)

然後用變數num替換掉數值,變成

return num * ruc (num - 1)

注意:

遞迴函式容易造成死迴圈,原因是沒有結束遞迴的條件,而且會造成棧溢位。

在計算機中,函式呼叫是通過棧(stack)這種資料結構實現的,每當進入乙個函式呼叫,棧就會加一層棧幀,每當函式返回,棧就會減一層棧幀。由於棧的大小不是無限的,所以,遞迴呼叫的次數過多,會導致棧溢位。

拓展:

import sys

#設定遞迴次數

sys.setrecursionlimit = 1000 #最多遞迴1000次

#獲取遞迴次數

sys.getrecursionlimit()

函式使用注意事項

目錄 函式使用注意事項 1.自定義函式 1 無引數,無返回值 2 無引數,有返回值 3 有引數,無返回值 4 有引數,有返回值 5 函式名不能重複 2.函式呼叫 1 呼叫的方式 2 呼叫時,要寫實參 3 呼叫時,實參的個數和先後順序應該和定義函式中要求的一致 4 如果呼叫的函式有返回值,那麼就可以用...

wllvm使用及注意事項

export llvm compiler llvm gcc export llvm gcc prefix export llvm compiler path path to llvm 2.9 release asserts bin 這裡不能填llvm gcc的路徑,不然在extract bc的時候會...

WFP TreeView使用及注意事項

最近接手wpf的專案,從0開始,做些積累 hierarchicaldatatemplate hierarchicaldatatemplate顧名思義,分層資料模板,就是用來定義分層資料樣式的模板,一般多用於menuitem和treeviewitem datatype指定模板用於哪種資料型別 item...