點選檢視上一節:命名空間
遞歸
首先來看一個例子:求一個數字的階乘。
什麼是階乘?
用數字說明:
1! = 1
2! = 1
*
2 = 2
3! = 1
2
*
*
3 = 6
4! = 1
*
3
*
4 = 24
*
接下來聯系一個例子,10!。
1、直接相乘
#最笨的方法,老老實實的從1相乘到10
print(1*2*3*4*5*6*7*8*9*10)
但是這個顯然是不友善的,如果是求到100!,1000!。。。呢?
2、用循環求階乘
# 建立一個變量儲存結果
n = 10
for i in range(1,10):
n *= i
print(n)
結果為:

顯然也是正确的。
3、建立一個函數,可以用來求任意數的階乘
文法結構:
參數:n 為要求階乘的數字
代碼顯示:
def factorial(n):
# 建立一個變量,來儲存結果
result = n
for i in range(1,n):
result *= i
return result
# 求10的階乘
print(factorial(10)) #調用函數即可,并賦予一個參數
執行結果為:
而且此時隻需要修改需要求階乘的數字即可,就會調用函數來求不同數字的階乘了。
遞歸的概念
遞歸就是一個遞歸式的函數,而且遞歸不是Python獨有的,其他語言裡面也會有。
小故事:
從前有座山,山裡有座廟,廟裡有個老和尚講故事,講的什麼故事呢?
從前有座山,山裡有座廟,廟裡有個老和尚講故事,講的什麼故事呢?....
這個故事就可以無限的循環下去了。。這就是遞歸的一種形式。
那麼遞歸簡單了解就是自己去引用自己!
遞歸式函數,就是在函數中自己調用自己!
無窮遞歸:如果這個函數被調用,程式的記憶體會溢出,效果類似于死循環。如下展示:
def fn():
fn()
fn()
會造成系統的崩潰,不要随便寫這種函數。
概念
遞歸是解決問題的一種方式,它和循環很像,它的整體思想是,将一個大問題分解為一個個的小問題,直到問題無法分解時,再去解決問題。
遞歸式函數的兩個要件
1.基線條件:問題可以被分解為的最小問題,當滿足基線條件時,遞歸就不在執行了
2.遞歸條件:将問題繼續分解的條件
遞歸和循環
用10!來展示一下遞歸:
10! = 10 * 9!
9! = 9 * 8!
8! = 8 * 7!
...
1! = 1
遞歸的方式:
def factorial(n):
# 基線條件 判斷n是否為1,如果為1則此時不能再繼續遞歸
if n == 1 :
# 1的階乘就是1,直接傳回1
return 1
# 遞歸條件
return n * factorial(n-1)
print(factorial(10))
之前的課程中我們也講過循環的寫法,兩者基本是類似的,可以互相替換,但是循環編寫起來比較容易,閱讀起來稍難;遞歸編寫起來難,但是友善閱讀。
練習
1、建立一個函數 power 來為任意數字做幂運算 n ** i
2、建立一個函數,用來檢查一個任意的字元串是否是回文字元串,如果是傳回True,否則傳回False。
回文字元串,字元串從前往後念和從後往前念是一樣的。
點選學習配套視訊課程
擷取更多内容請訂閱
Python學習站官方技術圈!