用递归方法判断是否是欧几里得数 的问题!
def gcd(x,y):if x % y != 0:
times = 1
z = x % y
r = y % z
if r == 0:
print('%d 为 %d 与 %d 的最大公约数'%(z,x,y))
else:
return gcd(z,r)
else:
print('输入的整数不符合要求!')
代码如上
print('%d 为 %d 与 %d 的最大公约数'%(z,x,y))
, 有什么办法能让这里的x,y输出为第一次输入的参数x,y。
先谢谢咯~~ 运算之前,保存副本啊。
def gcd(x,y):
a,b=x,y
if x % y != 0:
times = 1
z = x % y
r = y % z
if r == 0:
print('%d 为 %d 与 %d 的最大公约数'%(z,a,b))
else:
return gcd(z,r)
else:
print('输入的整数不符合要求!') sunrise085 发表于 2020-3-24 21:24
运算之前,保存副本啊。
我递归了a,b 会被递归的值重新赋值 本帖最后由 jackz007 于 2020-3-24 22:00 编辑
把 gcd() 与数据输入、信息输出分离不就好了
def gcd(x , y):
if y : return gcd(y , x % y)
else : return x
s = input('请输入两个整数:') . strip() . split()
r = gcd(int(s) , int(s))
if r > 1 : print('%d 为 %d 与 %d 的最大公约数' % (r , int(s) , int(s)))
else : print('输入的整数不符合要求!') 本帖最后由 sunrise085 于 2020-3-24 21:59 编辑
Twilight6 发表于 2020-3-24 21:48
我递归了a,b 会被递归的值重新赋值
不好意思,没看到你使用了递归,那样的话,你就不能再函数中这样print了。
因为一旦执行到if语句,一般都会进行了若干次递归了,那时的gcd(x,y)中的x和y早就不是原来的x和y 了。 jackz007 发表于 2020-3-24 21:54
把 gcd() 与数据输入、信息输出分离不就好了
哈哈我现在的知识感觉有点限制了我的理解。。。看不懂尴尬{:9_230:} sunrise085 发表于 2020-3-24 21:57
不好意思,没看到你使用了递归,那样的话,你就不能再函数中这样print了。
因为一旦执行到if语句,一 ...
好吧。。。不过还是谢谢啦~~ 可以使用闭包
def gcd(x, y):
a = x
b = y
def f(x, y):
if x % y != 0:
times = 1
z = x % y
r = y % z
if r == 0:
print('%d 为 %d 与 %d 的最大公约数' % (z, x, y))
else:
return gcd(z, r)
else:
return y # 修改
return f(x, y)
页:
[1]