Python函式 第四節 遞迴函式

2021-10-10 23:34:43 字數 767 閱讀 7940

乙個函式在內部呼叫自身本身,這個函式就是遞迴函式

def fact(n):

if n==1:

return 1

return n * fact(n - 1)

print(fact(3))

e:\anaconda3\anaconda\python.exe f:/seven.py

6process finished with exit code 0

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

解決遞迴呼叫棧溢位的方法是通過尾遞迴優化,事實上尾遞迴和迴圈的效果是一樣的,所以,把迴圈看成是一種特殊的尾遞迴函式也是可以的。

def fact(n):

return fact_iter(n, 1)

def fact_iter(num, product):

if num == 1:

return product

return fact_iter(num - 1, num * product)

尾遞迴是指,在函式返回的時候,呼叫自身本身,並且,return語句不能包含表示式。這樣,編譯器或者直譯器就可以把尾遞迴做優化,使遞迴本身無論呼叫多少次,都只占用乙個棧幀,不會出現棧溢位的情況,把每一步的乘積傳入到遞迴函式中

第四節 C 函式過載

在真實的軟體開發中,經常要使用到函式過載,尤其在類的設計中,經常遇到。c 的函式過載是指,多個函式可以使用同乙個函式名,但是條件是函式的引數列表必須不同,引數列表內,可以是引數的數目不同,引數的型別不同等,如下所示 include void setvalue int one void setvalu...

Python基礎第四節

字典是 鍵值對 的無序可變序列,其中每個元素都是乙個 鍵值對 包含 鍵物件 和 值物件 就像可通過列表元素索引值獲取對應物件,我們可通過 鍵物件 獲取 刪除 更新其對應的值物件。鍵必須是不可變資料,如整數 浮點數 字串 元組,不能是字典 列表 集合等可變物件,鍵不可重複。若重複出現鍵,則後面的覆蓋前...

Chapter02 第四節 函式

函式定義 函式原型 函式呼叫 函式定義即定義乙個函式 形如 double sqrt double x 函式呼叫即呼叫這個函式,形如 double value sqrt x 函式原型即函式宣告,如double sqrt double 編譯系統要求先編譯函式,再呼叫函式。也就是定義要放在函式之前。但是不...