python函数递归拆分_python 函数的递归

递归:简单来说就是自己调用自己

这里我们又要举个例子来说明递归能做的事情。

例一:

现在你们问我,alex老师多大了?我说我不告诉你,但alex比 egon 大两岁。

你想知道alex多大,你是不是还得去问egon?egon说,我也不告诉你,但我比武sir大两岁。

你又问武sir,武sir也不告诉你,他说他比金鑫大两岁。

那你问金鑫,金鑫告诉你,他40了。。。

这个时候你是不是就知道了?alex多大?

1

金鑫

40

2

武sir

42

3

egon

44

4

alex

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 40

else:

ret=f(n-1)+2

return ret

print(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)//2

if l[mid]>aim:

return f(l[0:mid],aim)

elif l[mid]

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)//2

if l[mid]>aim:

return f(l,aim,start,mid-1)

elif l[mid]

return f(l,aim,mid+1,end)

elif l[mid]==aim:

return mid

else:

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 key

elif 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]) :

continue

threeLM(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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值