python递归函数例子_python之路——递归函数与实例

递归函数

递归函数的定义:

1、一个函数在内部调用自己,这就叫递归函数

2、递归的层数在python里面是有限制的

3、必须要有一个结束条件

解耦:

要完成一个完整的功能,但这个功能的规模要尽量小,并且和这个功能无关的其他代码应该和这个函数分离。

1、增强代码的重要性

2、减少代码变更的相互影响

例一:

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

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

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

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

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

首先,你是不是问alex的年龄,结果又找到egon、武sir、金鑫,你挨个儿问过去,一直到拿到一个确切的答案,然后顺着这条线再找回来,才得到最终alex的年龄。这个过程已经非常接近递归的思想。我们就来具体的我分析一下,这几个人之间的规律。

4、aelx 46 #egon+2 4 age(4)=age(3)+2

3、egon 44 #武sir+2 age(3)=age(2)+2

2、武sir 42 #金鑫+2 age(2)=age(1)+2

1、金鑫 40 #age(1)==40

defage(n):if n == 1:return 40

else:return age(n-1)+2

print(age(4)

例二:

二分查找:

l = [2,3,5,10,15,16,18,22,26,30,32,35,41,42,43,55,56,66,69,72,76,82,83,88]

ContractedBlock.gif

ExpandedBlockStart.gif

def search(num,l,start=None,end=None):

start= start if start else0

end= end if end else len(l)-1mid= (end-start)//2+startif l[mid] >num:

search(num,l,start,mid-1)elif l[mid]

search(num,l,mid+1,end)elif l[mid] ==num:print(mid,l[mid]) #print(mid)

search(66,l)

阶乘(没有返回值)

ContractedBlock.gif

ExpandedBlockStart.gif

def search(num,l,start=None,end=None):

start= start if start else0

end= end if end len(l)-1mid= (end-start)//2+startif l[mid] >num:return search(num,l,start,mid-1)elif l[mid]

阶乘(有返回值)

例三:

阶乘:n=7 7*6*5*4*3*2*1

deffunc(n):if n==1:return 1

else:return n*func(n-1)print(func(7))

例四:

三级菜单:

ContractedBlock.gif

ExpandedBlockStart.gif

menu ={'北京': {'海淀': {'五道口': {'soho': {},'网易': {},'google': {}

},'中关村': {'爱奇艺': {},'汽车之家': {},'youku': {},

},'上地': {'百度': {},

},

},'昌平': {'沙河': {'老男孩': {},'北航': {},

},'天通苑': {},'回龙观': {},

},'朝阳': {},'东城': {},

},'上海': {'闵行': {"人民广场": {'炸鸡店': {}

}

},'闸北': {'火车战': {'携程': {}

}

},'浦东': {},

},'山东': {},

}deffunc(menu):whileTrue:for k in menu:print(k)

key= input('>>>')elif key =='q':return 'q'

elif key == 'b':breakres=func(menu[key])if res=='q':return 'q'func(menu)

三级菜单

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值