python递归的问题?

发布于 2022-09-06 13:04:06 字数 782 浏览 16 评论 0

最近学习 python,遇到一个递归的问题。学习递归最容易理解就是裴波那契数列,这个我能理解,但是遇到了一个算阶乘的问题, 想不通看代码。

def func(a1):
    if a1 == 5:
        return a1
    return a1 * func(a1 + 1)

print (func(1))

这个递归如果是简单的 return func(a1 + 1) 我还好理解,但是加上这个 a1 * 之后我就懵逼了。

我的理解:

调用函数第一次进来 a1 = 1, 不等于 5 走下面直接得到一个 a1 * func(a1 +1) 相当于 1 * func(2) 这里因为是 return 的值所以结果是要返回的,2 就是第一个的返回值,这时候 a1 = 2 继续调用相当于 2 * (a1 + 1)(这时候 a1 = 2 了),那这个返回值就是 6 了, 2*6=12, a1=12, 继续调用 12*13

我这个算法感觉有点小牛逼,但是觉得我理解的也没啥问题,就是拿返回值继续套嘛,所以懵逼了o(╯□╰)o

哪位小哥哥帮我捋一捋不胜感激。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

瞎闹 2022-09-13 13:04:06

这个程序其实就是执行 12345 = 120
执行的步骤就是:

  • 输入a1=1
  • func(1) = 1func(2) 此时需renturn 1func(2)的值
  • func(2)的值暂时不知道,就再跑上面这个函数,func(2) = 2*func(3)
    其实本质上就等于 func(1) = 12fun(3)
  • func(3)的值也不知道,继续计算,func(3) = 3func(4),相当于func(1)=123func(4)
  • 继续func(4),func(1) = 1234func(5)
  • 函数中有判断条件 if a1 == 5 return a1, 此时a1=5,所有func(5) = 5
  • 所以func(1) = 12345 = 120
凶凌 2022-09-13 13:04:06

观察代码可知,此函数是从1开始递增计算a1的阶乘。以a1=5为例,算法逻辑如下:
1 当传入参数a1!=5时,进入return a1 * func(a1 + 1)语句。
2 当传入参数a1 ==5时,直接返回a1的值,此时递归计算结束。
所以,这个函数的运算步骤为:
loop1 :1*func(1+1);
loop2: func(1+1)=2*func(2+1);
loop3: func(2+1)=3*func(3+1);
loop4: func(3+1)=4*func(4+1);
loop5: func(4+1)=5;
最终结果为:12345=120

春花秋月 2022-09-13 13:04:06

你把这个看成一个数学问题
阶乘是什么?
f(1) = 1
f(n) = n * f(n-1)
所以就是

def f(n):
  if n <= 0:
    return 0
  if n == 1:
    return 1
  return n * f(n-1)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文