函數(shù)的遞歸
函數(shù)調(diào)用自身的 編程技巧 稱為遞歸
特點
- 函數(shù) 內(nèi)部 調(diào)用自己
- 函數(shù)內(nèi)部可以調(diào)用其他函數(shù),當然在函數(shù)內(nèi)部也可以調(diào)用自己
代碼特點
- 函數(shù)內(nèi)部的 代碼 是相同的步淹,只是針對 參數(shù) 不同从隆,處理的結(jié)果不同
- 當 參數(shù)滿足一個條件 時,函數(shù)不再執(zhí)行
- 這個非常重要缭裆,通常被稱為遞歸的出口键闺,否則 會出現(xiàn)死循環(huán)!
示例代碼:
函數(shù)調(diào)用本身
def f(x):
if x > 1:
y = 5 * x + 6
# 函數(shù)作為返回值
return y + f(x - 1)
y = 5 * x + 6
# return 關(guān)鍵字 返回一個內(nèi)容
return y
print(f(5))
斐波那契數(shù)列
斐波那契數(shù)列(Fibonacci sequence)澈驼,又稱黃金分割數(shù)列辛燥、因數(shù)學(xué)家列昂納多·斐波那契(Leonardoda Fibonacci)以兔子繁殖為例子而引入,故又稱為“兔子數(shù)列”缝其,指的是這樣一個數(shù)列:1挎塌、1、2内边、3榴都、5、8漠其、13嘴高、21、34和屎、……在數(shù)學(xué)上拴驮,斐波納契數(shù)列以如下被以遞推的 方法定義:F(1)=1,F(xiàn)(2)=1, F(n)=F(n-1)+F(n-2)(n>=3柴信,n∈N)* 每一位數(shù)都等于前兩位數(shù)之和莹汤,在現(xiàn)代物理、準晶體結(jié)構(gòu)颠印、化學(xué)等領(lǐng)域,斐波納契數(shù)列都有直接的應(yīng)用抹竹。
- 定義一個函數(shù)
fib
- 能夠接收一個
num
的整數(shù)參數(shù) - 計算 1 + 1 + 2 + 3 + 5 + 8 ... num 的結(jié)果
第N個數(shù)是多少
def fib1():
return 1
def fib2():
return 1
def fib3():
return fib1() + fib2()
def fib4():
return fib3() + fib2()
def fib5():
return fib4() + fib3()
print(fib5())
# 從第三個月開始算
def fib(x):
if x == 2 or x == 1:
return 1
return fib(x-1) + fib(x-2)
print(fib(4))
def fic(n):
if n == 1 or n == 2:
return n
elif n >= 3:
return fic(n - 1) + fic(n - 2)
else:
return -1
print(fic(5))
Snipaste_2019-03-27_20-46-15.png
N階樓梯上樓問題:一次可以走兩階或一階线罕,問有多少種上樓方式?
def fic(n):
if n == 1 or n == 2:
return n
elif n >= 3:
return fic(n - 1) + fic(n - 2)
else:
return -1
print(fic(5))
提示:遞歸是一個 編程技巧窃判,初次接觸遞歸會感覺有些吃力钞楼!在處理 不確定的循環(huán)條件時,格外的有用袄琳,例如:遍歷整個文件目錄的結(jié)構(gòu)