【问题标题】:How can I get a recursive python function to return a value?如何让递归 python 函数返回一个值?
【发布时间】:2017-02-07 00:41:31
【问题描述】:

我是 python 新手,我只是在编写一个简单的递归函数来返回两个整数的 GCD。如果我在 gcd 函数中使用 print 语句,该函数就可以正常工作。但是,如果我让函数返回值并尝试在函数外部打印返回值,则不会打印任何内容。这可能是一个小问题,但我尝试了很多东西,但没有任何效果。我在这里做错了什么?

def gcd(m,n):
    if m==n:
        return m
    else:
        if m>n:
            gcd(m-n,n)
        else:
            gcd(m,n-m)
m=int(input('Enter first number'))
n=int(input('Enter second number'))
out=gcd(m,n)
print(out)

【问题讨论】:

  • 只需在对gcd(...)的递归调用前添加return
  • 我在函数中有一个 return 语句,不像那个问题。但是为什么函数仍然没有返回值。我得到了解决方案,但仍然无法弄清楚它的工作方式。

标签: python


【解决方案1】:

当您进行递归调用时,您还希望返回它的返回值。否则,每当它调用自己时,它不会对它获取的值做任何事情,并且默认返回None

return gcd(m,n-m)

【讨论】:

  • 它有效,但它仍然困扰着我。我并不完全想要递归调用的返回值。它只是调用函数本身。也许它是 python 的工作方式。 if 条件的第一个 return 语句不应该工作吗?
  • @thebuggedash 确实如此,但是结果值没有被捕获,然后它被垃圾收集,并且你最外面的调用隐式返回None。如果没有显式返回值,Python函数隐式返回None
  • @juanpa.arrivillaga 谢谢。我想我明白了。
  • @thebuggedash def get_max(x): max(x)def get_max(x): return max(x) 之间的区别
  • @juanpa.arrivillaga 我习惯了 c++,递归调用不需要返回值。基本情况的返回值就足够了。这对我来说很奇怪。可能需要一些时间来适应。
猜你喜欢
  • 1970-01-01
  • 2010-10-09
  • 1970-01-01
  • 2022-08-03
  • 2014-07-13
  • 1970-01-01
  • 1970-01-01
  • 2018-01-02
  • 2017-01-02
相关资源
最近更新 更多