python靜態遞迴函式 python遞迴函式

2021-10-12 15:12:44 字數 3269 閱讀 4430

一、遞迴的定義

1.什麼是遞迴:在乙個函式裡在呼叫這個函式本身

2.最大遞迴層數做了乙個限制:997,但是也可以自己限制

1 deffoo():2 print(n)3 n+=1

4 foo(n)5 foo(1)

驗證997

3.最大層數限制是python預設的,可以做修改,但是不建議你修改。(因為如果用997層遞迴都沒有解決的問題要麼是不適合使用遞迴來解決問題,要麼就是你的**太爛了)

1 importsys2 sys.setrecursionlimit(10000000)#修改遞迴層數

3 n=04 deff():5 globaln6 n+=1

7 print(n)8 f()9 f()

view code

我們可以通過以上**,匯入sys模組的方式來修改遞迴的最大深度。

4.結束遞迴的標誌:return

5.遞迴解決的問題就是通過引數,來控制每一次呼叫縮小計算的規模

6.使用場景:資料的規模在減少,但是解決問題的思路沒有改變

7.很多排序演算法會用到遞迴

二、遞迴小應用

1.下面我們來猜一下小明的年齡

小明是新來的同學,麗麗問他多少歲了。

他說:我不告訴你,但是我比滔滔大兩歲。

滔滔說:我也不告訴你,我比曉曉大兩歲

曉曉說:我也不告訴你,我比小星大兩歲

小星也沒有告訴他說:我比小華大兩歲

最後小華說,我告訴你,我今年18歲了

這個怎麼辦呢?當然,有人會說,這個很簡單啊,知道小華的,就會知道小星的,知道小星的就會知道曉曉的,以此類推,就會知道小明的年齡啦。這個過程已經非常接近遞迴的思想了。

小華18+2

小星20+2

曉曉22+2

滔滔24+2

小明26+2

上面的圖我們可以用個序號來表示吧

age(5) = age(4)+2age(4) = age(3) + 2age(3) = age(2) + 2age(2) = age(1) + 2age(1) = 18

那麼**該怎麼寫呢?

1 defage(n):2 if n == 1:3 return 18

4 else:5 return age(n - 1) + 2

7 ret=age(6)8 print(ret)

view code

2.乙個數,除2直到不能整除2

1 defcal(num):2 if num%2==0:#先判斷能不能整除

3 num=num//2

4 returncal(num)5 else:6 returnnum7 print(cal(8))

乙個數,除2直到不能整除2

3.如果乙個數可以整除2,就整除,不能整除就*3+1

1 deffunc(num):2 print(num)3 if num==1:4 return

5 if num%2==0:6 num=num//2

7 else:8 num=num*3+1

9 func(num)10 func(5)

如果乙個數可以整除2,就整除,不能整除就*3+1

三、**選單

menu = ,

'網易': {},

'google': {}

'中關村': ,

'汽車之家': {},

'youku': {},

'上地': ,

'北航': {},

'天通苑': {},

'回龍觀': {},

'朝陽': {},

'東城': {},

'上海':

'閘北':

'浦東': {},

'山東': {},

1 defthreelm(menu):2 whiletrue:3 for key in menu:#迴圈字典的key,列印出北京,上海,山東

4 print(key)5 name=input('>>>:').strip()6 if name=='back' or name=='quit':#如果輸入back,就返回上一層。如果輸入quit就退出

7 return name #返回的name的給了ret

8 if name inmenu:9 ret=threelm(menu[name])10 if ret=='quit':return 'quit'#如果返回的是quit,就直接return quit 了,就退出了

11 threelm()12 #print(threelm(menu))#print列印了就返回出quit了,threelm()沒有列印就直接退出了

**選單

四、二分查詢演算法

從這個列表中找到55的位置l = 【2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,67,69,72,76,82,83,88】

這就是二分查詢,從上面的列表中可以觀察到,這個列表是從小到大依次遞增的有序列表。

按照上面的圖就可以實現查詢了。

1 l = [2, 3, 5, 10, 15, 16, 18, 22, 26, 30, 32, 35, 41, 42, 43, 55, 56, 66, 67, 69, 72, 76, 82, 83, 88]2 deffind(l,aim):3 mid=len(l)//2#取中間值,//長度取整(取出來的是索引)

4 if l[mid]>aim:#判斷中間值和要找的那個值的大小關係

5 new_l=l[:mid]#顧頭不顧尾

6 return find(new_l,aim)#遞迴演算法中在每次函式呼叫的時候在前面加return

7 elif l[mid]<8 new_l="l[mid+1:]9" returnfind else:11 returnl print>

簡單的二分法

1 l = [2, 3, 5, 10, 15, 16, 18, 22, 26, 30, 32, 35, 41, 42, 43, 55, 56, 66, 67, 69, 72, 76, 82, 83, 88]2 def func(l, aim,start = 0,end = len(l)-1):3 mid = (start+end)//2#求中間的數

4 if not l[start:end+1]:#如果你要找的數不在裡面,就return'你查詢的數字不在這個列表裡面'

5 return '你查詢的數字不在這個列表裡面'

6 elif aim >l[mid]:7 return func(l,aim,mid+1,end)8 elif aim

14 index = func(l,55)15 print(index)16 #print(func(l,41))

公升級版二分法

8>

python靜態遞迴函式 python 遞迴函式

前言 本篇關於遞迴基本借鑑下面部落格講解加入自己理解。1.遞迴函式定義 如果乙個函式在函式內部呼叫自己,那這個函式就是遞迴函式。如 defsum arg,stop print arg if arg arg arg sum arg,stop sum 1,20 2.遞迴的特性 1 必須有乙個明確的結束條...

python遞迴函式例項 python遞迴函式

python遞迴函式 什麼是遞迴?遞迴,就是在函式執行中自己呼叫自己 示例 def recursion n 定義遞迴函式 print n 列印n recursion n 1 在函式的執行種呼叫遞迴 recursion 1 呼叫函式 這個函式在不斷的自己呼叫自己,每次呼叫n 1,看下執行結果 998t...

PYTHON 遞迴函式

如果乙個函式體直接或者間接呼叫自己,那麼這個函式就稱為遞迴函式 也就是說,遞迴函式體的執行過程中可能會返回去再次呼叫該函式 在 裡,遞迴函式不需要任何特殊的語法,但是它需要付出一定的努力去理解和建立 我們會以乙個簡單的例子開始 寫乙個函式求乙個自然數中所有數字的和 在設計遞迴函式的時候,我們會尋找能...