当需要重复多次计算相同的问题时,通常可以选择递归或者循环
函数直接或者间接调用自身就是递归
- 必须有一个明确的递归结束条件,称为递归出口,否则就会无限调用(相当于死循环)。
- 递归需要有边界条件、递归前进段和递归返回段。
- 当边界条件不满足时,递归前进。当边界条件满足时,递归返回。
下面来看两个小例子:
①求n 的阶乘 ,例如5! =5*4*3*2*1
【python|递归和循环】先用循环的方式实现:
def fn(n,s=1):
for i in range(1,n+1):
s *=i
return s
用递归方式实现:
def fn(n):
if n ==1:#递归结束条件
return n
return n*fn(n-1)
#fn(5)= 5*fn(4) = 5*4*fn(3) = 5*4*3*fn(2) = 5*4*3*2*fn(1) = 5*4*3*2*1
#这是另一种递归形式
def fn(n,s=1):
if n=1:
return s
else:
return fn(n-1,s*n)#将累乘的结果传递到下一次调用中去#fn(5,1)=>fn(4,5)=>fn(3,20)=>fn(2,60)=>fn(1,120)=>120
②猴子第一天摘了若干个桃子,当即吃了一半,还不解馋,又多吃了一个;第二天,吃剩下的桃子的一半,还不过瘾,又多吃了一个;以后每天都吃前一天剩下的一半多一个,到第10天想再吃时,只剩下一个桃子了。问第一天共摘了多少个桃子?
用循环实现:
def peach(day=10,s=1):
for i in range(day-1):
s = (s+1)*2
return s
peach()#运行结果:1534
用递归求解:
def peach(day=1):
if day==10:#设置边界条件
return 1
return (peach(day+1)+1)*2#运行结果:1534
#另一种递归方式求解:def peach(day=10,s=1):
if day==1:
return s
return peach(day-1,(s+1)*2)#将上一次计算结果传递到下一次计算中去
peach()#运行结果:1534
推荐阅读
- 推荐系统论文进阶|CTR预估 论文精读(十一)--Deep Interest Evolution Network(DIEN)
- Python专栏|数据分析的常规流程
- Python|Win10下 Python开发环境搭建(PyCharm + Anaconda) && 环境变量配置 && 常用工具安装配置
- Python绘制小红花
- Pytorch学习|sklearn-SVM 模型保存、交叉验证与网格搜索
- OpenCV|OpenCV-Python实战(18)——深度学习简介与入门示例
- python|8. 文件系统——文件的删除、移动、复制过程以及链接文件
- 爬虫|若想拿下爬虫大单,怎能不会逆向爬虫,价值过万的逆向爬虫教程限时分享
- 分布式|《Python3网络爬虫开发实战(第二版)》内容介绍
- java|微软认真聆听了开源 .NET 开发社区的炮轰( 通过CLI 支持 Hot Reload 功能)