Python支持遞歸函數(shù)——即直接或間接地調用自身以進行循環(huán)的函數(shù)。遞歸是頗為高級的話題,并且它在Python中相對少見。然而,它是一項應該了解的有用的技術,因為它允許程序遍歷擁有任意的、不可預知的形狀的結構。遞歸甚至是簡單循環(huán)和迭代的替換,盡管它不一定是最簡單的或最高效的一種。
要對一個數(shù)字列表(或者其他序列)求和,我們可以使用內置的sum函數(shù),或者自己編寫一個更加定制化的版本。這里我們就用遞歸來編寫一個定制求和函數(shù):
def mysum(L):
... if not L:
... return 0
... else:
... return L[0] + mysum(L[1:]) # Call myself
mysum([1,2,3,4,5])
15
在每一層,這個函數(shù)都遞歸地調用自己來計算列表剩余的值的和,這個和隨后加到前面的一項中。當列表變?yōu)榭盏臅r候,遞歸循環(huán)結束并返回0。當像這樣使用遞歸的時候,對函數(shù)調用的每一個打開的層級,在運行時調用堆棧上都有自己的一個函數(shù)本地作用域的副本,也就是說,這意味著L在每個層級都是不同的。
這很難理解(并且對于新程序員來說,它常常是難以理解),下面我們嘗試給函數(shù)添加一個L的打印并再次運行它,從而在每個調用層級記錄下當前的列表:
def mysum(L):
... print(L) # Trace recursive levels
... if not L: # L shorter at each level
... return 0
... else:
... return L[0] + mysum(L[1:])
...
mysum([1,2,3,4,5])
[1,2,3,4,5]
[2,3,4,5]
[3,4,5]
[4,5]
[5]
[]
15
正如你所看到的,在每個遞歸層級上,要加和的列表變得越來越小,直到它變?yōu)榭铡f歸循環(huán)結束。加和隨著遞歸調用的展開而計算出來。
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。
舉報投訴
相關推薦
函數(shù)是Python技術學習中重要的一個環(huán)節(jié),深入掌握該階段的知識內容,對于Python技術能力的提升非常有幫助,這里就針對遞歸函數(shù)與匿名
發(fā)表于 07-19 16:22
Labview遞歸函數(shù)的使用案例,簡單的1+2+3...+100求和,簡單易懂,充分理解遞歸函數(shù)的思想
發(fā)表于 10-09 09:37
C++教程之函數(shù)的遞歸調用
在執(zhí)行函數(shù) f 的過程中,又要調用 f 函數(shù)本身,稱為函數(shù)的遞歸調
發(fā)表于 05-15 18:00
?35次下載
C語言支持遞歸,即一個函數(shù)可以調用其自身。但在使用遞歸時,程序員需要注意定義一個從函數(shù)退出的條件,否則會進入死循環(huán)。
發(fā)表于 11-12 15:06
?7075次閱讀
函數(shù)的遞歸算法
1.范例:求組合數(shù),
一、實驗目的1. 學會解決簡單的遞歸算法。2. 掌握函數(shù)的嵌套調用。
發(fā)表于 01-29 10:51
?2次下載
這篇文章介紹C語言的內聯(lián)函數(shù)、遞歸函數(shù)、函數(shù)指針、指針函數(shù)、局部地址、const關鍵字、extern關鍵字等知識點;這些知識點在實際項目開發(fā)
發(fā)表于 08-14 10:03
?1637次閱讀
在程序開發(fā)中,有時候,會希望一個函數(shù)執(zhí)行結束后,告訴調用者 **一個結果** ,以便調用者針對結果作后續(xù)的處理,返回值是函數(shù)完成工作后,最后給調用者的一個結果,在函數(shù)中使用 return 關鍵字可以返回結果,**調用者** 可以
發(fā)表于 02-16 15:19
?732次閱讀
Python函數(shù)比我們想象的更為靈活。由于Python函數(shù)是對象,所以函數(shù)對象可以賦值給其他的名字、傳遞給其他
發(fā)表于 02-21 14:24
?478次閱讀
程序調用自身的編程技巧稱為遞歸(recursion)。遞歸作為一種算法在程序設計語言中廣泛應用。一個過程或函數(shù)在其定義或說明中有直接或間接調用自身的一種方法,它通常把一個大型復雜的問題層層轉化為一個
發(fā)表于 02-21 15:57
?547次閱讀
遞歸函數(shù)必須有終止條件。編程中,函數(shù)的調用要占用名叫棧(stack)的內存空間。調用函數(shù)時,程序會將相關的數(shù)據(jù)存儲到計算機的棧里。
發(fā)表于 02-23 10:25
?1767次閱讀
要說到遞歸如果不說棧的話,我覺得有點不合適,遞歸特點就是不斷的調用同一個函數(shù),如果這個函數(shù)沒有一個遞歸界限,那么就是死循環(huán)了,所以討論
發(fā)表于 06-06 15:24
?951次閱讀
函數(shù)是程序設計中的一個重要概念,在很多編程語言中都存在。函數(shù)可以接受輸入數(shù)據(jù),并且根據(jù)輸入數(shù)據(jù)進行一系列操作,最后可以返回一個或多個結果。Python是一種非常流行的編程語言,也支持
發(fā)表于 11-21 16:37
?1146次閱讀
Python是一種高級編程語言,它提供了許多內置函數(shù),可以幫助開發(fā)人員更輕松地處理各種任務。但是,在Python中并非所有的函數(shù)都是內置函數(shù)
發(fā)表于 11-29 14:27
?1342次閱讀
遞歸指的是在函數(shù)的定義中使用函數(shù)自身的方法。
發(fā)表于 02-26 10:34
?313次閱讀
當我們碰到諸如需要求階乘或斐波那契數(shù)列的問題時,使用普通的循環(huán)往往比較麻煩,但如果我們使用遞歸時,會簡單許多,起到事半功倍的效果。這篇文章主要和大家分享一些和遞歸有關的經典案例,結合一些資料談一下個人的理解,也借此加深自己對遞歸
發(fā)表于 08-05 15:57
?263次閱讀
評論