鱼C论坛

 找回密码
 立即注册
查看: 2053|回复: 4

[已解决]递归的这段代码怎么理解呢~~~

[复制链接]
发表于 2017-5-23 20:24:32 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
def gcd(x, y):
    if y:
        return gcd(y, x%y)
    else:
        return x
   
print(gcd(4, 6))

这段用递归,用欧几里得算法求最大公约数怎么理解啊
最佳答案
2017-5-23 20:45:10
这种方法主要是采用辗转相除法来求最大公约数  例如
1: gcd(12,8)代入递归方程
2: y=8>0 ,再调用函数gcd(8,12%8)=gcd(8,4)
3: 进入第二层递归,此y=4>0,再调用gcd(4,8%4)=gcd(4,0)
4: 进入递归,此时y=0,直接返回x=4 就是最大公约数了

对于一般的函数求解,可以采用试数的方式来理解程序执行的过程,如果是要这个方法的证明可以在网上搜一些资料
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-5-23 20:35:22 | 显示全部楼层
对任意非零的y,先执行gcd(x, y),若y<x,那么x%y == x,这样就保证gcd(x, y)中,x比y大。然后再依靠欧几里算法求得最大公约数
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-23 20:45:10 | 显示全部楼层    本楼为最佳答案   
这种方法主要是采用辗转相除法来求最大公约数  例如
1: gcd(12,8)代入递归方程
2: y=8>0 ,再调用函数gcd(8,12%8)=gcd(8,4)
3: 进入第二层递归,此y=4>0,再调用gcd(4,8%4)=gcd(4,0)
4: 进入递归,此时y=0,直接返回x=4 就是最大公约数了

对于一般的函数求解,可以采用试数的方式来理解程序执行的过程,如果是要这个方法的证明可以在网上搜一些资料
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-24 05:17:12 | 显示全部楼层
本帖最后由 7728821314502 于 2017-5-24 05:19 编辑

def gcd(x, y):
    if y:
        return gcd(y, x%y)
    else:
        return x
   
print(gcd(2, 4))
过程是这样的


if 4:
  return gcd(4,2)

if 2:
  return gcd(2,0)

if 0:
  return 2


去网上查一下【欧几里得算法】是怎样的 就懂了

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-24 18:56:47 | 显示全部楼层
同样的问题,天天都能遇到。这个问题我在论坛至少回答了3次以上。 请楼主提问前先搜索下论坛!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-2-27 17:12

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表