一函式遞迴呼叫介紹
函式不僅可以巢狀定義,還可以巢狀呼叫,即在呼叫乙個函式的過程中,函式內部又呼叫另乙個函式,而函式的遞迴呼叫指的是在呼叫乙個函式的過程中又直接或間接的呼叫該函式本身
例如:在呼叫f1的過程中,又呼叫f1,這就是直接呼叫函式f1本身
deff1(
):print
('from f1'
) f1(
)f1(
)
在呼叫f1的過程中,又呼叫f2,而在f2的過程中又呼叫f1,這就是間接呼叫函式f1本身
deff1(
):print
('from f1'
) f2(
)deff2(
):print
('from f2'
) f1(
)f1(
)
二回溯與遞推
下面我們用乙個淺顯的例子,來認識遞迴的原理和使用
某公司四個員工坐在一起,問第四個人薪水,他說比第三個人多1000,問第三個人薪水,第他說比第二個人多1000,問第二個人薪水,他說比第乙個人多1000,最後第一人說自己每月5000,請問第四個人的薪水是多少?
思路解析:
要知道第四個人的月薪,就必須知道第三個人的,第三個人的又取決於第二個人的,第二個人的又取決於第乙個人的,而且每乙個員工都比前乙個多一千,數學表示式即:
salary(4)
=salary(3)
+1000
salary(3)
=salary(2)
+1000
salary(2)
=salary(1)
+1000
salary(1)
=5000
總結為:
salary(n)
=salary(n-1)
+1000
(n>1)
salary(1)
=5000
(n=1
)
很明顯這是乙個遞迴的過程,可以將該過程分為兩個階段:回溯和遞推。
在回溯階段,要求第n個員工的薪水,需要回溯得到(n-1)個員工的薪水,以此類推,直到得到第乙個員工的薪水,此時,salary(1)已知,因而不必再向前回溯了。然後進入遞推階段:從第乙個員工的薪水可以推算出第二個員工的薪水(6000),從第二個員工的薪水可以推算出第三個員工的薪水(7000),以此類推,一直推算出第第四個員工的薪水(8000)為止,遞迴結束。需要注意的一點是,遞迴一定要有乙個結束條件,這裡n=1就是結束條件。
def
salary
(n):
if n==1:
return
5000
return salary(n-1)
+1000
s=salary(4)
print
(s)執行結果:
8000
遞迴本質就是在做重複的事情,所以理論上遞迴可以解決的問題迴圈也都可以解決,只不過在某些情況下,使用遞迴會更容易實現,比如有乙個巢狀多層的列表,要求列印出所有的元素,**實現如下
l=[1
,[2,
3,[4
,[5,
[6,[
7,8]
]]]]
]def
f1(list1)
:for x in list1:
iftype
(x)is
list
: f1(x)
else
:print
(x)f1(l)
python函式之遞迴函式
在計算機程式設計裡,遞迴指的是乙個過程 函式不斷引用自身,直到引用的物件已知。1 自己呼叫自己 2 必須有乙個明確的結束條件 優點 缺點 計算n的階乘 def factorial n if n 1 return 1 fac n factorial n 1 return fac n 5print 的階...
Python之遞迴函式
如果乙個函式在函式內部呼叫函式本身,那麼這個函式就是遞迴函式。例如用遞迴函式計算階乘。deffact n if n 1 return 1.return n fact n 1 fact 1 1 fact 7 5040 fact 999 traceback most recent call last f...
python之函式遞迴
函式的遞迴 函式呼叫自身的程式設計技巧稱為遞迴 遞迴函式的特點 特點 特點 函式內部的 是相同的,只是針對引數不同,處理的結果不同當引數滿足乙個條件時,函式不再執行 示例 def sum numbers num print num 遞迴的出口很重要,否則會出現死迴圈 遞迴案例 計算數字累加 需求 定...