函數(shù)遞歸
1.遞歸的定義
函數(shù)的遞歸調(diào)用:是函數(shù)嵌套調(diào)用的一種特殊形式
函數(shù)的遞歸調(diào)用指的是在調(diào)用一個函數(shù)的過程中又直接或間接地調(diào)用該函數(shù)本身
例:直接調(diào)用函數(shù)f1本身
def f1():
print('from f1')
f1()
f1()
例:間接調(diào)用函數(shù)f1本身
def f1():
print('from f1')
f2()
def f2():
print('from f2')
f1()
f1()
例:一段代碼循環(huán)的方式
#方式1:while,for循環(huán)
while True:
print('好好學(xué)習(xí)')
#方式2:遞歸的本質(zhì)就是循環(huán)
def f():
print('好好學(xué)習(xí)')
f()
f()
遞歸調(diào)用都是一個無限循環(huán)的過程
強調(diào):遞歸調(diào)用不應(yīng)該無限循環(huán)相叁, 必須讓遞歸調(diào)用在滿足某個特定條件下終止
x=0
while x<10:
print(x)
x+=1
def f1(n):
if n == 10:
return
print(n)
n+=1
f1(n)
f1(0)
2.遞歸的兩個階段
回溯:一層一層調(diào)用下去
遞推:滿足某種結(jié)束條件,結(jié)束遞歸調(diào)用,然后一層一層返回
age(5) = age(4) + 10
age(4) = age(3) + 10
age(3) = age(2) + 10
age(2) = age(1) + 10
age(1) = 18
def age(n):
if n == 1:
return 18
return age(n-1) + 10
res=age(5)
print(res)
3.遞歸的應(yīng)用
l=[1,2,[3,4]]
for x in l:
if type(x) is list:
for a in x:
print(a)
else:
print(x)
l=[1,2,[3,4],6,7,[8,9,10,[11,12,[13,[14,15]]]]]
def f1(list1):
for x in list1:
if type(x) is list:
# 如果是列表翁潘,應(yīng)該再循環(huán)、再判斷,即重新運行本身的代碼
f1(x)
else:
print(x)
f1(l)