为什么Python返回None而不是value

时间:2018-12-07 05:44:15

标签: python c++ algorithm math

这些愚蠢的问题中的另一个。 我这里有一个非常简单的算法,可以计算出最大的命令分隔符。

我的C ++代码段看起来像这样

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”来解决此问题。 但是为什么呢?

1 个答案:

答案 0 :(得分:1)

在两种情况下,您都需要在递归调用中使用return

否则,在C ++中,您将具有未定义的行为。在Python中,您得到None

C ++

int findGcd(int m, int n)
{
    int r = m % n;

    if(r == 0)
    {
        return n;
    }

    else
    {
        m = n;
        n = r;
        return findGcd(m, n);
    }
}

Python:

def findGcd(m, n):
"""Calculates the greatest common divider """
    r = m % n

    if r == 0:
        return n

    else:
        m = n
        n = r
        return findGcd(m, n)

您可以通过提高编译器的警告级别来捕获C ++中的此类问题。使用g++ -Wall,我得到:

socc.cc: In function ‘int findGcd(int, int)’:
socc.cc:16:1: warning: control reaches end of non-void function [-Wreturn-type]
 }
 ^