day16 递归函数
生活随笔
收集整理的這篇文章主要介紹了
day16 递归函数
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、遞歸 函數
? 為什么要有函數,提高代碼的可讀性,避免重復的代碼,提高代碼的復用性
? ? ?在函數中能用return的不要print
1、遞歸的最大深度997
def foo(n):print(n)n+=1foo(n) foo(1)遞歸的最大深度
2、修改遞歸的最大深度
? ? 由此我們可以看出,未報錯之前能看到的最大數字就是997.
當然了,997是python為了我們程序的內存優化所設定的一個默認值,
我們當然還可以通過一些手段去修改它:
import sys sys.setrecursionlimit(2000) n=0 def func():global nn+=1print(n)func() func() # 1997修改遞歸的最大深度
?3、遞歸的例子
例一:
現在你們問我,alex老師多大了?我說我不告訴你,但alex比 egon 大兩歲。
你想知道alex多大,你是不是還得去問egon?egon說,我也不告訴你,但我比武sir大兩歲。
你又問武sir,武sir也不告訴你,他說他比金鑫大兩歲。
那你問金鑫,金鑫告訴你,他40了。。。
這個時候你是不是就知道了?alex多大
def age(n):if n==4:return 40else:return age(n+1)+2 print(age(1)) #46年齡的遞歸
詳細解析步驟:
?
4、總結:
? ?在一個函數里面調用自己,默認的遞歸最大限度是1000(不要修改遞歸的最大限度)
? ?往往遞歸都是和循環掛在一起的,人理解循環,神理解遞歸
?二、二分查找算法
def find_2(l,aim,start=0,end=None):if end==None:end=len(l)-1if start<=end:mid=(end-start)//2+startif l[mid]>aim:ret=find_2(l,aim,start,mid-1)return retelif l[mid]<aim:ret=find_2(l,aim,mid+1,end)return retelse:return aim,midelse:print("找不到這個值") l=[2,3,4,5,6,7,8,9,10,11,12,13,14,15] print(find_2(l,6))二分查找算法
?
?
?
例題:
1、階乘的算法 4*3*2*1
def f(n): if n==1:return 1else:return n*f(n-1) print(f(4))階乘的算法
2、斐波那契數列
# 1,1,2,3,4,5,8,13... # n=10 def fib(n):if n==1 or n==2:return 1else:return fib(n-1)+fib(n-2) print(fib(10))斐波那契數列
3、三級菜單:
menu = {'北京':{'海淀':{'五道口':{'sogo':{},'網易':{},'google':{}},'中關村':{'愛奇藝':{},'汽車之家':{},'youku':{},},'上地':{'百度':{},},},'昌平':{'沙河':{'匯德商廈老男孩':{},'北航':{},},'天通苑':{},'回龍觀':{},},'朝陽':{'朝陽大媽' },'東城':{},},'上海':{'閔行':{"人民廣場":{'炸雞店':{}}},'閘北':{'火車戰':{'攜程':{}}},'浦東':{},},'山東':{'高麗':{}},}
def meu_3(menu):while True:for key in menu:print(key)choice=input("選擇:")if choice=="q" or choice=="b":return choiceelif choice in menu and menu[choice]:borq=meu_3(menu[choice])if borq=="q":return "q"
meu_3(menu)
?
轉載于:https://www.cnblogs.com/number1994/p/7995111.html
總結
以上是生活随笔為你收集整理的day16 递归函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 本人近期要去留学,想在走之前集中学习一下
- 下一篇: easyui 报表合并单元格