python遞歸函數(shù)使用詳解
課前練習(xí)
請實現(xiàn)一個裝飾器,把'函數(shù)的返回值'+100然后'返回'
def ount(fun):
def werrod(*ardes,**warrrts):
res=fun(*ardes,**warrrts)
return res+100
return werrod
@ount
def funs(intes):
return int(intes)
res=funs(100)
print(res)請實現(xiàn)一個裝飾器,通過一次調(diào)用使函數(shù)重復(fù)執(zhí)行5次
def ount(fun):
def werrod(*ardes,**warrrts):
count=0
while count<5:
print('輸出')
fun(*ardes,**warrrts)
count+=1
return werrod
@ount
def funs():
print('循環(huán)')
funs()請實現(xiàn)一個裝飾器每次調(diào)用函數(shù)時,將函數(shù)名字寫入文件中
def ount(fun):
def werrod(*ardes,**warrrts):
with open('qw','a',encoding='utf-8')as f:
f.write(f'name={fun.__name__}\n')
fun(*ardes,**warrrts)
return werrod
@ount
def funs():
pass
funs()遞歸函數(shù)
遞歸:直接或者間接的調(diào)用其他函數(shù)
def index():
print('from index')
func()
def func():
print('from func')
index()
func()
遞歸在實際編碼中是不允許出現(xiàn)的,一旦出現(xiàn)了無限遞歸就會直接報錯
1. 遞推
一層一層的往下尋找答案
2. 回溯
通過最后一個結(jié)果往回尋找最開始的那個答案
遞歸是必須有結(jié)束條件?。。?!遞歸的使用場景
階乘運算
def dig(fun):
def inter(ase):
if ase==0:
return 1
else:
return inter(ase - 1) * ase
return inter(fun)
print(dig(5))
求第5個人的年齡
def inter(ase):
if ase == 1:
return 18
return inter(ase - 1) +2#每個人的年齡相差為2
res=inter(5)
print(res)算法二分法
二分法的原理
二分法的原理: 1. 列表必須先排序(從小到大,從大到小) 2. 折半查找
思路
一般思路
將列表的元素一個一個的經(jīng)行比較
然后得出結(jié)果
l = [11, 2, 3, 43, 55, 67, 23, 45, 45, 88, 99, 66,]
for i in l:
if i == 66:
print('找到了')二分法
l=[12,23,124,123,41,24,134,12]
l.sort()
target_num = 200
def my_half(l,target_num):
if len(l) == 0:
print('沒找到')
return
# 3. 取的就是中間的那個索引
middle_index = len(l) // 2 # 向下取整 5 // 2 == 2 6 // 2 == 3
if target_num > l[middle_index]:
l_right = l[middle_index+1:] #
print(l_right)
my_half(l_right, target_num)
elif target_num < l[middle_index]:
l_left = l[:middle_index]
print(l_left)
my_half(l_left, target_num)
else:
print('找到了')
my_half(l, target_num)三元表達式
對于只有二選一的情況,我們推薦使用三元表達式 語法結(jié)構(gòu): res = 條件成立之后的結(jié)果 if 條件 else 條件不成立之后的結(jié)果
def my_max(a, b):
return a if a > b else b
res = my_max(1, 2)"""還支持嵌套""" ## 不推薦寫太多的嵌套,一般兩層就夠了,超過兩層了,建議不這樣寫,面試的時候:成數(shù)非常多 res = 2 if 2 > 10 else ( 10 if False else (100 if 10 > 5 else (2 if False else 1))) print(res)
列表生成式
names_list = ['kevin', 'jerry', 'tank', 'oscar'] # # 列表生成式 res = [ name + '_SB' for name in names_list] print(res)
res = [name+'_SB' if name != 'jerry' else name for name in names_list] print(res)
遞歸函數(shù)是一種強大的編程技巧,可以解決一些需要重復(fù)執(zhí)行相同操作的問題。在Python中,我們可以使用遞歸函數(shù)來簡化代碼邏輯和實現(xiàn)復(fù)雜的算法。遞歸函數(shù)的核心思想是將一個大問題分解為更小規(guī)模的子問題,并通過調(diào)用自身來解決這些子問題。遞歸函數(shù)通常包含兩個部分:基本情況和遞歸情況。基本情況是指函數(shù)停止調(diào)用自身的條件,通常是問題規(guī)模達到最小或滿足某個條件時。遞歸情況是指函數(shù)調(diào)用自身來解決更小規(guī)模的問題,直到達到基本情況。在編寫遞歸函數(shù)時,需要注意遞歸深度和結(jié)束條件,否則可能導(dǎo)致無限循環(huán)或棧溢出等問題。遞歸函數(shù)的實現(xiàn)需要仔細思考問題的分解方式和遞歸調(diào)用的參數(shù)傳遞。遞歸函數(shù)在解決一些問題時可以提供簡潔的解決方案,但也可能導(dǎo)致性能問題,因為遞歸調(diào)用會占用額外的內(nèi)存和時間。因此,在使用遞歸函數(shù)時,需要權(quán)衡其優(yōu)缺點,并根據(jù)具體情況選擇合適的解決方法。
到此這篇關(guān)于python遞歸函數(shù)使用詳解的文章就介紹到這了,更多相關(guān)python遞歸函數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python接口自動化之淺析requests模塊post請求
這篇文章Python接口自動化之淺析requests模塊post請求,以下主要介紹requests模塊中的post請求的使用,post源碼,data、json參數(shù)應(yīng)用場景及實戰(zhàn)2021-08-08
torch 中各種圖像格式轉(zhuǎn)換的實現(xiàn)方法
這篇文章主要介紹了torch 中各種圖像格式轉(zhuǎn)換的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12
Python實現(xiàn)HTML轉(zhuǎn)Word的示例代碼
這篇文章主要為大家詳細介紹了使用Python實現(xiàn)HTML轉(zhuǎn)Word的相關(guān)知識,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-12-12
Python發(fā)送form-data請求及拼接form-data內(nèi)容的方法
這篇文章主要介紹了Python發(fā)送form-data請求及拼接form-data內(nèi)容的方法,文中采用的是requests的方式發(fā)送multipart/form-data請求,需要的朋友可以參考下2016-03-03
使用python將CSV和Excel表格數(shù)據(jù)導(dǎo)入到Word表格
在不同格式的文檔之間進行數(shù)據(jù)傳輸是非常重要的操作,例如將CSV和Excel表格數(shù)據(jù)導(dǎo)入到Word文檔中,不僅可以實現(xiàn)數(shù)據(jù)的有效整合與展示,還能極大地提升工作效率和文檔的專業(yè)性,本文將介紹如何使用Python將CSV和Excel表格數(shù)據(jù)導(dǎo)入到Word文檔中并創(chuàng)建表格2024-09-09

