• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

递归函数

python 搞java代码 3年前 (2022-05-21) 26次浏览 已收录 0个评论
1、什么是递归函数
  递归函数是指在一个函数内部通过调用自己来完成一个问题的求解。
2、如何使用递归函数以及什么情况下使用它?
  当我们在进行问题分解,发现分解之后待解决的子问题与原问题有着相同的特性和解法,只是在问题规模上与原问题相比 有所减小,此时,就可以设计递归函数进行求解。
原理分析:
  比如,对于计算n!的问题,可以将其分解为:n! = n*(n-1)!。可见,分解后的子问题(n-1)!与原问题n!的计算方法完全一样,只是规模有所减小。同样,(n-1)!这个子问题又可以进一步分解为(n-1)*(n-2)!,(n-2)!可以进一步分解为(n-2)*(n-3)!…,直到要计算1!时,直接返回1。
3、Demo 编写递归函数计算n的阶乘。
1 <span>def</span> fac(n): <span>#</span><span>定义函数fac </span>
2     <span>if</span> n==1: <span>#</span><span>如果要计算1的阶乘,则直接返回1(结束递归调用的条件) </span>
3         <span>return</span> 1 
4     <span>return</span> n*fac(n-1) <span>#</span><span>将计算n!分解为n*(n-1)! </span>
5 <span>print</span>(fac(5)) <span>#</span><span>调用fac函数计算5的阶乘并将结果输出到屏幕</span>
www#gaodaima.com来源gaodai^.ma#com搞#代!码网搞代码
调用过程:fac(5)=>5*fac(4)=>5*(4*fac(3))=>5*(4*(3*fac(2)))=>5*(4*(3*(2*fac(1))))=>5*(4*(3*(2*1)))=>5*(4*(3*2))=>5*(4*6)=>5*24=>120
 
注意:当问题规模较大时,递归调用会涉及到很多层的函数调用,一方面会由于栈操作影响程序运行速度,另一方面在Python中有栈的限制,太多层的函数调用会引起栈溢出问题(如将第5行的fac(5)改为fac(1000)则会报错)。
4、Demo 使用非递归的方式调用n的阶乘
1 <span>def</span> fac(n): <span>#</span><span>定义函数fac </span>
2     f=1 <span>#</span><span>保存阶乘结果 </span>
3     <span>for</span> i <span>in</span> range(2,n+1): <span>#</span><span>i依次取值为2至n </span>
4         f*=i <span>#</span><span>将i乘到f上 </span>
5     <span>return</span> f <span>#</span><span>将计算结果返回 </span>
6 <span>print</span>(fac(5)) <span>#</span><span>调用fac函数计算5的阶乘并将结果输出到屏幕    </span>
 


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:递归函数
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址