遞迴是一種程式設計思想,應用場景:
在我們日常開發中,如果要遍歷乙個資料夾下面所有的檔案,通常會使用遞迴來實現;
在後續的演算法課程中,很多演算法都離不開遞迴,例如:快速排序。
# 3 + 2 + 1
def sum_numbers(num):
# 1.如果是1,直接返回1 -- 出口
if num == 1:
return 1
# 2.如果不是1,重複執行累加並返回結果
return num + sum_numbers(num-1)
sum_result = sum_numbers(3)
# 輸出結果為6
如果乙個函式有乙個返回值,並且只有一句**,可以使用 lambda簡化。
lambda 引數列表 : 表示式
注意
# 函式
def fn1():
return 200
print(fn1)
print(fn1())
# lambda表示式
fn2 = lambda: 100
print(fn2)
print(fn2())
def add(a, b):
return a + b
result = add(1, 2)
print(result)
思考:需求簡單,是否**多?
fn1 = lambda a, b: a + b
print(fn1(1, 2))
fn1 = lambda: 100
print(fn1())
fn1 = lambda a: a
print(fn1('hello world'))
fn1 = lambda a, b, c=100: a + b + c
print(fn1(10, 20))
fn1 = lambda *args: args
print(fn1(10, 20, 30))
注意:這裡的可變引數傳入到lambda之後,返回值為元組。
fn1 = lambda **kwargs: kwargs
print(fn1(name='python', age=20))
fn1 = lambda a, b: a if a > b else b
print(fn1(1000, 500))
students = [,,
]# 按name值公升序排列
students.sort(key=lambda x: x['name'])
print(students)
# 按name值降序排列
students.sort(key=lambda x: x['name'], reverse=true)
print(students)
# 按age值公升序排列
students.sort(key=lambda x: x['age'])
print(students)
# 總結
lambda 引數列表: 表示式
lambda: 表示式
lambda 引數: 表示式
lambda key=value: 表示式
lambda *args: 表示式
lambda **kwargs: 表示式
Python基礎 遞迴函式
通俗一點來說在函式的內部,直接去呼叫其他函式的方式叫做函式的巢狀.但是,如果這個函式呼叫的是自身呢?這個樣子的函式自身就屬於遞迴函式 經典例項 階乘自身就能用遞迴函式來表達出來 1 1 2 2 1 3 3 2 1 n n n 1 2 1以上是簡單直接說明了階乘的表達,接下來至二級用函式來進行直接表達...
python基礎 遞迴函式
遞迴函式 能自己呼叫自己的函式。特點 1必須有乙個明確的結束條件。否則會成死迴圈 2每次進入更深一層遞迴時,問題規模比上一層要減少。否則記憶體會撐爆 3遞迴效率不高,容易導致棧溢位。引入遞迴函式,先看乙個函式呼叫的執行順序。執行順序 如下圖。執行 過程中遇到函式,會在記憶體中載入函式,但不會執行,呼...
python基礎 函式遞迴
函式不僅可以巢狀定義,還可以巢狀呼叫,即在呼叫乙個函式的過程中,函式內部又呼叫另乙個函式,而函式的遞迴呼叫指的是在呼叫乙個函式的過程中又直接或間接地呼叫該函式本身 例如在呼叫f1的過程中,又呼叫f1,這就是直接呼叫函式f1本身 在呼叫f1的過程中,又呼叫f2,而在呼叫f2的過程中又呼叫f1,這就是間...