日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

函数递归

發布時間:2025/4/14 编程问答 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 函数递归 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

遞歸:簡單來說就是自己調用自己

這里我們又要舉個例子來說明遞歸能做的事情。

例一:

現在你們問我,alex老師多大了?我說我不告訴你,但alex比 egon 大兩歲。

你想知道alex多大,你是不是還得去問egon?egon說,我也不告訴你,但我比武sir大兩歲。

你又問武sir,武sir也不告訴你,他說他比金鑫大兩歲。

那你問金鑫,金鑫告訴你,他40了。。。

這個時候你是不是就知道了?alex多大?

1金鑫  40
2武sir  42
3egon  44
4alex   46

你為什么能知道的?

首先,你是不是問alex的年齡,結果又找到egon、武sir、金鑫,你挨個兒問過去,一直到拿到一個確切的答案,然后順著這條線再找回來,才得到最終alex的年齡。這個過程已經非常接近遞歸的思想。我們就來具體的我分析一下,這幾個人之間的規律。

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

那這樣的情況下,我們的函數應該怎么寫呢?

?

__author__ = 'Administrator' def f(n):if n==1:return 40else:ret=f(n-1)+2return retprint(f(5))''' n=5 return f(4)+2=f(3)+4=f(2)+6=f(1)+8 '''
遞歸實現二分算法

如果有這樣一個列表,讓你從這個列表中找到66的位置,你要怎么做?

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]def f(l,aim):mid=len(l)//2if l[mid]>aim:return f(l[0:mid],aim)elif l[mid]<aim:return f(l[mid+1:],aim)else:return l[mid]print(f(l,66))

2.升級版本,找到位置

?

__author__ = 'Administrator' 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]def f(l,aim,start,end):mid=(start+end)//2if l[mid]>aim:return f(l,aim,start,mid-1)elif l[mid]<aim:return f(l,aim,mid+1,end)elif l[mid]==aim:return midelse:print("找不到")print(f(l,66,0,len(l)-1))

遞歸函數與三級菜單

menu = {'北京': {'海淀': {'五道口': {'soho': {},'網易': {},'google': {}},'中關村': {'愛奇藝': {},'汽車之家': {},'youku': {},},'上地': {'百度': {},},},'昌平': {'沙河': {'老男孩': {},'北航': {},},'天通苑': {},'回龍觀': {},},'朝陽': {},'東城': {},},'云南': {'昆明': {"官渡區": {'阿拉村':{},'大板橋':{},'官渡廣場':{},'關上':{}},"五華區":{},'呈貢':{}},'曲靖': {'宣威': {'美幻廣場': {},'宛水公園': {},'東山': {}},'麒麟區': {'麒麟公園': {},'珠江源廣場': {},'南城門廣場': {}},'沾益區': {'玉林山水': {},'小花園': {},},},'玉溪': {'紅塔區': {'紅塔集團': {},'聶耳廣場': {}},'澄江縣': {'撫仙湖': {},'黃金海岸': {},},'通海縣': {'銅鍋飯': {},'石鍋魚': {},}},},'山東': {}, } def threeLM(dic):while True:for k in dic:print(k)key = input('input>>').strip()if key == 'b' or key == 'q':return keyelif key in dic.keys() and dic[key]:ret = threeLM(dic[key])if ret == 'q': return 'q'elif (not dic.get(key)) or (not dic[key]) :continuethreeLM(menu)

?

def fun(s):while True:for k in s:print(k)dd=input("input>>:").strip()if dd in s:fun(s[dd])elif dd=="back":break fun(menu)

?

轉載于:https://www.cnblogs.com/ctztake/p/7265163.html

總結

以上是生活随笔為你收集整理的函数递归的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。