遞迴,匿名函式

2022-04-29 08:48:07 字數 2771 閱讀 7201

目錄匿名函式

函式的巢狀呼叫:函式巢狀函式。函式的遞迴呼叫:它是一種特殊的巢狀呼叫,但是它在呼叫乙個函式過程中,有直接間接呼叫了自身。

def foo():

print('from foo')

foo()

foo() # 進入死迴圈

def bar():

print('from bar')

foo()

def foo():

print('from foo')

bar()

bar()

遞迴必須要有兩個明確的階段:

回溯:遞迴必須要有乙個明確的結束條件,在滿足該條件開始一層一層回溯。

遞迴的精髓在於通過不斷地重複逼近乙個最終的結果。

def age(n):

if == 1:

return 26

res = age(n-1)+2

return res

print(f"age(5):)

age(5):34
二分法的應用
from random import randint

nums = [randint(1, 100) for i in range(100)]

nums = sorted(nums)

print(nums)

[1, 2, 4, 5, 5, 5, 6, 6, 6, 7, 7, 7, 10, 11, 11, 11, 11, 12, 13, 13, 15, 16, 16, 20, 21, 21, 23, 24, 26, 26, 27, 28, 28, 31, 33, 33, 34, 35, 38, 38, 39, 40, 42, 43, 45, 45, 46, 46, 47, 47, 51, 52, 52, 53, 53, 55, 55, 56, 56, 57, 57, 57, 58, 59, 61, 62, 64, 66, 66, 67, 68, 69, 69, 71, 72, 72, 74, 74, 75, 76, 78, 78, 79, 79, 79, 79, 80, 82, 85, 88, 89, 90, 90, 91, 91, 91, 94, 99, 99, 100]
def search(search_num,nums):

mid_index=len(nums)/2

print(nums)

if not nums:

print("not exists")

return

if search_num>nums[mid_index]:

nums=nums[mid_index+1:]

search(search_num,nums)

elif search_num num:

lis = lis[:lis_len]

rec_find_num(num, lis)

elif binary_num < num: # 10 < 18

lis = lis[lis_len + 1:]

rec_find_num(num, lis)

else:

print('找到了')

lis = [i for i in range(100000000)] # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]

start = time.time()

rec_find_num(4567899900, lis)

end = time.time()

print(end - start) # 1.1569085121154785

import time

lis = [i for i in range(100000000)]

def time_count(func):

start = time.time()

res = func(*args, **kwargs)

end = time.time()

print(end - start)

return res

@time_count

def find_num(num):

"""普通版本"""

for i in lis:

if i == num:

print('找到了')

break

else:

print('沒有被找到')

find_num(4567899900) # 2.293410062789917

salary_dict = 

print(f"max(salary_dict): ")

def func(k):

return salary_dict[k]

print(f"max(salary_dict, key=func()): ")

print(

f"max(salary_dict, key=lambda name: salary_dict[name]): ")

max(salary_dict): tank

max(salary_dict, key=func()): jason

max(salary_dict, key=lambda name: salary_dict[name]): jason

sorted()、filter()、sorted()方法聯用。

匿名函式遞迴

lambda是匿名函式,因為沒有名字,也沒有關鍵字引用自身,因此遞迴的編碼就成了問題。一 最簡單有效的方案是 func f null 變數須先賦值才能使用 f n n 0?1 n f n 1 f 11 39916800 有人擔心f會被惡意修改,因為就是乙個委託變數,而且認為f是委託,而不是匿名函式自...

匿名函式遞迴

lambda是匿名函式,因為沒有名字,也沒有關鍵字引用自身,因此遞迴的編碼就成了問題。一 最簡單有效的方案是 func f null 變數須先賦值才能使用 f n n 0?1 n f n 1 f 11 39916800 有人擔心f會被惡意修改,因為就是乙個委託變數,而且認為f是委託,而不是匿名函式自...

scheme匿名函式遞迴

匿名函式與 有名函式 scheme中匿名函式使用 lambda 函式實現,格式為 lamdba 例如 lambda i i 3 接受乙個引數,返回它與3的和呼叫方法為 lambda i i 3 2 5而有名函式的定義方式和呼叫方式如下 define 格式 define function n 例子 n...