python用递归方式实现最大公约数_梳理使用Python实现求两数最大公约数(四种方法)...

今天,我们梳理下使用Python求两数最大公约数的方法。

好了,废话不说,我们直接梳理四种方法:分别为辗转相除法、辗转相减法、枚举法和欧几里得算法。我们逐个进行分析。在分析之前,先欣赏一幅美景缓解下心情。。。

u=3580310610,3946999163&fm=173&app=25&f=JPEG?w=640&h=360&s=D2A69E4582C9316E1835C9810300709B黄河美景

辗转相除法(while循环实现)

两数求余temp = p % qtemp = 0时,q为最大公约数temp !=0时,p = q;q = temp注:该循环的是否继续的判断条件就是temp是否为0源代码如下图:

38dbb6fd5266d016e8ec744da2333c0334fa35ff.jpeg?token=aee85a965032312b78257d7598556b05&s=E0E2B7464AEABF705E71BC0F0000A0C1辗转相除法()

辗转相减法

如果p > q ,p = p - q如果q > p ,q = q - p假如p = q ,则 p或q 是最大公约数如果p != q,则继续继续相减,直至p = q源代码如下图所示

6a600c338744ebf83d0d566bece13f2e6059a706.jpeg?token=824992605f02505c0a25a5e0e8e8e5b9&s=C1C0B740CEAFB7701E79E50F0000E0C3辗转相

枚举法

将两数p,q中最小的放到smaller中用p,q分别对i(1到smaller之间)求余数,看是否能被整除直到p,q同时被i整除如不能整除,i+1后继续,直到i等于smaller

7acb0a46f21fbe09bca8a7515e78e4378644ad9a.jpeg?token=84bdb3f7506a1c1ff40075cb7bd022cc&s=A0F07780CBE09D605455D80F0100E0C1枚举法

欧几里得算法(辗转相除的递归实现)

该方法其实就是辗转相除法的递归版本实现

如果q=0,返回p;判断p>q如果p>q,则p、q的最大公约数等于q与p%q的最大公约数,以此递归源代码如下图

2f738bd4b31c8701126fc5d31167762b0608ffc3.jpeg?token=6d5503f1c2f18148129e633a1eb4bd71&s=E1D237C0CEA4A97016DDBC0E0000E0C1欧几里得算法

怎么样,是不是最后一种比较占优势?代码量少,而且运行速度也适中,但是到p、q之间差距较大(很大很大……)时,可能递归就不太占优势,这又牵扯到程序性能问题了,我们以后的章节中会和大家进行探讨,欢迎留言讨论,转载请注明出处(百家号:Python高手养成)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值