【问题标题】:Recursive function calculation [closed]递归函数计算[关闭]
【发布时间】:2023-02-04 18:29:45
【问题描述】:

我想是否有人可以通过以下方式向我解释如何思考这种递归计算:

def walk(stop, start=1):
    print(start, end= "")
    if start +1 < stop:
         walk(stop, start +1)
            
walk(3)  

我的想法:

  • walk(3) 实际上是walk(3, 1) # 第一行 walk(stop, start=1)
  • 因为开始比停止小,我希望得到:if 2 &lt;3def walk(top)
  • 这意味着 walk(stop, start +1) 最终会变成:walk(3,3)
  • 我的结果是 3 - 但我应该得到 12

解决这个问题的步骤是什么?请记住,我是 Python 的新手,每个人都必须从某个地方开始——我相信这非常简单,但如果有人能解释如何思考这个问题,我将不胜感激。 谢谢

【问题讨论】:

  • 它确实按预期打印12
  • walk(3) is actually walk(3, 1) # for the first line walk(stop, start=1)是的。 because start is smaller than stop, I expected to get : if 2 &lt;3是的。 and that would mean that walk(stop, start +1) would end up being : walk(3,3)end up being是什么意思? my result was 3 - but I am supposed to get 12等等,你的第一的以为是walk(3) is actually walk(3, 1) 和功能印刷那么,当您希望只看到 3 时,您认为 1 在哪里?
  • 你好,为什么你觉得在项目符号 3 中,它是 walk(3,3) 不应该是 walk(3,2) 因为 start+1 是一个操作并且不同于 start=start+1 或 start+=1
  • 好的,我看到我已经加倍了。所以再次 1st)walk(3,1)- 因为 start+1=2 小于 3,所以我们去 walk(stop, start +1),这里是 get (3,2) -- 我还是不知道了解如何获得 12?
  • 是的,在 jupyter notebook 中运行时,我也得到 12。但我需要能够在不使用 jupyter 的情况下得到这个结果。

标签: python


【解决方案1】:

您没有得到预期结果的原因是 walk 函数中的 print 函数。它只打印start的当前值,不累加值。

要获得所需的结果,您需要修改函数以将 start 的当前值附加到一个字符串,并在递归调用之间传递该字符串。在递归结束时,您可以打印最终字符串。

def walk(stop, start=1, result=""):
    result += str(start)
    if start +1 < stop:
        walk(stop, start +1, result)
     else:
         print(result)

walk(3) 

【讨论】:

  • 感谢您编辑计算。但是你的意思是:它只打印 start 的当前值?我得到 12 是怎么回事?
猜你喜欢
  • 1970-01-01
  • 2013-06-11
  • 1970-01-01
  • 2013-11-26
  • 2015-07-28
  • 2021-05-03
  • 1970-01-01
  • 2022-11-25
  • 2018-05-20
相关资源
最近更新 更多