python遞歸函數(shù)使用詳解
課前練習(xí)
請(qǐng)實(shí)現(xiàn)一個(gè)裝飾器,把'函數(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)
請(qǐng)實(shí)現(xiàn)一個(gè)裝飾器,通過(guò)一次調(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()
請(qǐng)實(shí)現(xiàn)一個(gè)裝飾器每次調(diào)用函數(shù)時(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() 遞歸在實(shí)際編碼中是不允許出現(xiàn)的,一旦出現(xiàn)了無(wú)限遞歸就會(huì)直接報(bào)錯(cuò) 1. 遞推 一層一層的往下尋找答案 2. 回溯 通過(guò)最后一個(gè)結(jié)果往回尋找最開始的那個(gè)答案 遞歸是必須有結(jié)束條件!?。?!
遞歸的使用場(chǎng)景
階乘運(yùn)算 def dig(fun): def inter(ase): if ase==0: return 1 else: return inter(ase - 1) * ase return inter(fun) print(dig(5)) 求第5個(gè)人的年齡 def inter(ase): if ase == 1: return 18 return inter(ase - 1) +2#每個(gè)人的年齡相差為2 res=inter(5) print(res)
算法二分法
二分法的原理
二分法的原理: 1. 列表必須先排序(從小到大,從大到小) 2. 折半查找
思路
一般思路 將列表的元素一個(gè)一個(gè)的經(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('沒(méi)找到') return # 3. 取的就是中間的那個(gè)索引 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)
三元表達(dá)式
對(duì)于只有二選一的情況,我們推薦使用三元表達(dá)式 語(yǔ)法結(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)
"""還支持嵌套""" ## 不推薦寫太多的嵌套,一般兩層就夠了,超過(guò)兩層了,建議不這樣寫,面試的時(shí)候:成數(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ù)是一種強(qiáng)大的編程技巧,可以解決一些需要重復(fù)執(zhí)行相同操作的問(wèn)題。在Python中,我們可以使用遞歸函數(shù)來(lái)簡(jiǎn)化代碼邏輯和實(shí)現(xiàn)復(fù)雜的算法。遞歸函數(shù)的核心思想是將一個(gè)大問(wèn)題分解為更小規(guī)模的子問(wèn)題,并通過(guò)調(diào)用自身來(lái)解決這些子問(wèn)題。遞歸函數(shù)通常包含兩個(gè)部分:基本情況和遞歸情況。基本情況是指函數(shù)停止調(diào)用自身的條件,通常是問(wèn)題規(guī)模達(dá)到最小或滿足某個(gè)條件時(shí)。遞歸情況是指函數(shù)調(diào)用自身來(lái)解決更小規(guī)模的問(wèn)題,直到達(dá)到基本情況。在編寫遞歸函數(shù)時(shí),需要注意遞歸深度和結(jié)束條件,否則可能導(dǎo)致無(wú)限循環(huán)或棧溢出等問(wèn)題。遞歸函數(shù)的實(shí)現(xiàn)需要仔細(xì)思考問(wèn)題的分解方式和遞歸調(diào)用的參數(shù)傳遞。遞歸函數(shù)在解決一些問(wèn)題時(shí)可以提供簡(jiǎn)潔的解決方案,但也可能導(dǎo)致性能問(wèn)題,因?yàn)檫f歸調(diào)用會(huì)占用額外的內(nèi)存和時(shí)間。因此,在使用遞歸函數(shù)時(shí),需要權(quán)衡其優(yōu)缺點(diǎn),并根據(jù)具體情況選擇合適的解決方法。
到此這篇關(guān)于python遞歸函數(shù)使用詳解的文章就介紹到這了,更多相關(guān)python遞歸函數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python接口自動(dòng)化之淺析requests模塊post請(qǐng)求
這篇文章Python接口自動(dòng)化之淺析requests模塊post請(qǐng)求,以下主要介紹requests模塊中的post請(qǐng)求的使用,post源碼,data、json參數(shù)應(yīng)用場(chǎng)景及實(shí)戰(zhàn)2021-08-08使用SAE部署Python運(yùn)行環(huán)境的教程
這篇文章主要介紹了使用SAE部署Python運(yùn)行環(huán)境的教程,SAE作為新浪的在線軟件部署平臺(tái),在國(guó)內(nèi)擁有一定的性價(jià)比,需要的朋友可以參考下2015-05-05torch 中各種圖像格式轉(zhuǎn)換的實(shí)現(xiàn)方法
這篇文章主要介紹了torch 中各種圖像格式轉(zhuǎn)換的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12python中的計(jì)時(shí)器timeit的使用方法
本篇文章主要介紹了python中的計(jì)時(shí)器timeit的使用方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-10-10Python實(shí)現(xiàn)HTML轉(zhuǎn)Word的示例代碼
這篇文章主要為大家詳細(xì)介紹了使用Python實(shí)現(xiàn)HTML轉(zhuǎn)Word的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-12-12python刪除過(guò)期log文件操作實(shí)例解析
這篇文章主要介紹了python刪除過(guò)期log文件,分享了相關(guān)代碼示例,小編覺(jué)得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-01-01Python發(fā)送form-data請(qǐng)求及拼接form-data內(nèi)容的方法
這篇文章主要介紹了Python發(fā)送form-data請(qǐng)求及拼接form-data內(nèi)容的方法,文中采用的是requests的方式發(fā)送multipart/form-data請(qǐng)求,需要的朋友可以參考下2016-03-03使用python將CSV和Excel表格數(shù)據(jù)導(dǎo)入到Word表格
在不同格式的文檔之間進(jìn)行數(shù)據(jù)傳輸是非常重要的操作,例如將CSV和Excel表格數(shù)據(jù)導(dǎo)入到Word文檔中,不僅可以實(shí)現(xiàn)數(shù)據(jù)的有效整合與展示,還能極大地提升工作效率和文檔的專業(yè)性,本文將介紹如何使用Python將CSV和Excel表格數(shù)據(jù)導(dǎo)入到Word文檔中并創(chuàng)建表格2024-09-09