如何在Python中使用递归函数找到最大公约数?

Hri*_*iev 3 python recursion controls input function

我被要求使用 Python 中的递归函数找到整数xy的最大公约数。条件表示:如果 y 等于 0,则 gcd (x,y) 为x;否则 gcd(x,y) 为 gcd(y,x%y)。为了尝试该代码,我被要求从用户那里获取两个整数。这是我尝试过的:

def gcd(x , y):
    if y == 0:
        return x
    else:
        return (y, x % y)

num_one = int(input('Enter a value for x: '))
num_two = int(input('Enter a value for y: '))
if num_two == 0:
    print(num_one)
else:
    print(gcd(num_two))
Run Code Online (Sandbox Code Playgroud)

这是我得到的错误: TypeError: gcd() Missing 1 requiredpositional argument: 'y'

先感谢您。

opp*_*yer 5

试试这个,简单的改变:

def gcd(x , y):
    if y == 0:
        return x
    else:
        return gcd(y, x % y)
Run Code Online (Sandbox Code Playgroud)

与 math.gcd 相比:

In [1231]: gcd(127,127**2)                                                                                                                                                                                 
Out[1231]: 127

In [1232]: math.gcd(127, 127**2)                                                                                                                                                                           
Out[1232]: 127
Run Code Online (Sandbox Code Playgroud)

并改变这个:

    print(gcd(num_two))
Run Code Online (Sandbox Code Playgroud)

    print(gcd(num_one, num_two))
Run Code Online (Sandbox Code Playgroud)

完整变更:

def gcd(x , y):
    if y == 0:
        return x
    else:
        return gcd(y, x % y)

num_one = int(input('Enter a value for x: '))
num_two = int(input('Enter a value for y: '))
if num_two == 0:
    print(num_one)
else:
    print(gcd(num_one, num_two))
Run Code Online (Sandbox Code Playgroud)

输出:

Enter a value for x: 46
Enter a value for y: 12
2
Run Code Online (Sandbox Code Playgroud)