【发布时间】:2019-05-08 21:19:34
【问题描述】:
这些愚蠢的问题中的另一个。 我这里有一个非常简单的算法来计算最大的 commen 除数。
我的 C++ sn-p 是这样的
int findGcd(int m, int n)
{
int r = m % n;
if(r == 0)
{
return n;
}
else
{
m = n;
n = r;
findGcd(m, n);
}
}
int main()
{
cout << findGcd(13, 3);
return 0;
}
... 它返回(与本例中的预期完全一样)1.
如果我在 Python 中实现它 - 如下所示:
def findGcd(m, n):
"""Calculates the greatest common divider """
r = m % n
if r == 0:
return n
else:
m = n
n = r
findGcd(m, n)
number = findGcd(13,3)
print(number)
它只返回 NONE 而不是 1。我已经对其进行了调试,并且 n 确实存储了正确的 1 值,但仍然返回 None。
我可以通过在 else 分支中对函数的递归调用添加“return”来解决此问题。 但这是为什么呢?
【问题讨论】:
-
我无法在 C++ 中重现您的输出
-
@juanpa.arrivillaga,这是因为在 C++ 中,缺少的
return会导致未定义的行为。 -
我使用的是在线 C++ 编译器。原来是s#*t。很抱歉在这个问题上浪费了您的时间。误解只是由编译器的意外行为引起的。不过感谢您的帮助!
-
注意,有种语言有返回语句将隐式返回,例如斯卡拉。但是,你不应该假设因为某些东西在 C++(或者在这种情况下,它没有)或 Scala 中可以在 Python 中工作。