什么是函數遞歸:
1.函數的遞歸調用是函數的特殊的一種調用方式
2.函數的遞歸調用是指函數直接的或則間接的調用了自己本身
# 例如
def f1():
print('這是f1')
f1() # 直接調用了自己本身
def f2():
print('這是f2')
f3()
def f3():
print('這是f3')
f2() # 間接的調用了自己本身
3.python對函數的遞歸調用循環是有次數的限制的為1000次
4.函數的遞歸調用應該是有終止條件的,不然就變成了無限循環調用 沒有意義了
回溯與遞推
下面我們用一個淺顯的例子,為了讓讀者闡釋遞歸的原理和使用:
例4.5
某公司四個員工坐在一起,問第四個人薪水,他說比第三個人多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)
總結:使用遞歸,我們只需要分析出要重復執行的代碼邏輯,然后提取進入下一次遞歸調用的條件或者說遞歸結束的條件即可,代碼實現起來簡潔清晰