|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
def Mygcd(x,y):
"""使用递归编写一个函数,
利用欧几里得算法求最大公约数,
欧几里德算法又称辗转相除法
例如 gcd(x, y)
返回值为参数 x 和参数 y 的最大公约数"""
#x,y值排序
tx=x if x>=y else y
ty=y if x>=y else x
res=tx%ty
if res==0:
print(ty)
return ty
else:
Mygcd(ty,res)
x=int(input("请输入x:"))
y=int(input("请输入y:"))
print(x,",",y,"的最大公约数是:",type(Mygcd(x,y)))
运行结果,为什么返回的是none,打印出是3,这就有点坑了
请输入x:15
请输入y:18
3
15 , 18 的最大公约数是: <class 'NoneType'>
你的结果最后之所以为None, 原因是你 return ty 的返回值是返回给else里面的Mygcd的, 最外层的Mygcd并没有返回, 所以结果是None, 递归函数调用是一层套一层, 它们的返回值也是一层套一层, 并不是随便一个地方的返回值就是返回给最外层调用的函数的, 程序修改如下:
def Mygcd(x, y):
"""使用递归编写一个函数,
利用欧几里得算法求最大公约数,
欧几里德算法又称辗转相除法
例如 gcd(x, y)
返回值为参数 x 和参数 y 的最大公约数"""
# x,y值排序
tx = x if x >= y else y
ty = y if x >= y else x
res = tx % ty
if res == 0:
return ty
else:
result = Mygcd(ty, res)
return result
x = int(input("请输入x:"))
y = int(input("请输入y:"))
print(x, ",", y, "的最大公约数是:", Mygcd(x, y))
|
|