鱼C论坛

 找回密码
 立即注册
查看: 1843|回复: 6

[已解决]《零基础入门python》第017讲动动手1

[复制链接]
发表于 2018-3-26 18:02:48 | 显示全部楼层 |阅读模式
2鱼币
看完了第017讲,很困惑,求大神指点
谢谢大神

  1. def gcd(x, y):
  2.     while y:
  3.       [color=Red]  t = x % y[/color]      [color=Red]请问不是要用较小的数除吗?为什么这里没有进行比较呢?[/color]
  4.        [color=Red] x = y[/color]
  5.        [color=Red] y = t[/color]              [color=Red]这两处完全看不懂啊[/color]

  6.     return x
  7.    
  8. print(gcd(4, 6))
复制代码
最佳答案
2018-3-26 18:02:49
本帖最后由 吴阿汤 于 2018-3-27 11:05 编辑
  1. #辗转相除法, 又名欧几里德算法(Euclidean algorithm),是求最大公约数的一种方法。
  2. #它的具体做法是:用较小数除较大数,再用出现的余数(第一余数)去除除数,
  3. #再用出现的余数(第二余数)去除第一余数,如此反复,直到最后余数是0为止。
  4. #如果是求两个数的最大公约数,那么最后的除数就是这两个数的最大公约数。


  5. def gcd(x, y):
  6.     while y:       #请对照上述的算法理解
  7.         t = x % y  #t即为余数,如果为4除以6,商为0,余数为4
  8.         x = y      #这里是把被除数赋值为除数,即x=6
  9.         y = t      #这里是除数换成余数,即y=4,重新赋值完毕后,再进行循环,下一步是t=6%4

  10.     return x
  11.    
  12. print(gcd(4, 6))
复制代码


你说的x小于y的情况,就可以转换过来的。
另外,加注释的话用  ctrl+#就可以了。

最佳答案

查看完整内容

你说的x小于y的情况,就可以转换过来的。 另外,加注释的话用 ctrl+#就可以了。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-3-26 18:02:49 | 显示全部楼层    本楼为最佳答案   
本帖最后由 吴阿汤 于 2018-3-27 11:05 编辑
  1. #辗转相除法, 又名欧几里德算法(Euclidean algorithm),是求最大公约数的一种方法。
  2. #它的具体做法是:用较小数除较大数,再用出现的余数(第一余数)去除除数,
  3. #再用出现的余数(第二余数)去除第一余数,如此反复,直到最后余数是0为止。
  4. #如果是求两个数的最大公约数,那么最后的除数就是这两个数的最大公约数。


  5. def gcd(x, y):
  6.     while y:       #请对照上述的算法理解
  7.         t = x % y  #t即为余数,如果为4除以6,商为0,余数为4
  8.         x = y      #这里是把被除数赋值为除数,即x=6
  9.         y = t      #这里是除数换成余数,即y=4,重新赋值完毕后,再进行循环,下一步是t=6%4

  10.     return x
  11.    
  12. print(gcd(4, 6))
复制代码


你说的x小于y的情况,就可以转换过来的。
另外,加注释的话用  ctrl+#就可以了。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-3-26 18:36:18 | 显示全部楼层
如果x比y小,t就是x一个运行后x,y互换

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
drwyatt + 1 + 1

查看全部评分

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

使用道具 举报

发表于 2018-3-26 19:03:27 | 显示全部楼层
因为如果开始 x < y 的话,执行 t = x%y 后,t = x ;然后执行了 x = y , y = t,相当于把x 和y 的值互换了

然后可以继续执行下去了,这个算法是 辗转相除法,也叫欧几里德算法,不明白可以看百度百科

评分

参与人数 1鱼币 +2 收起 理由
drwyatt + 2

查看全部评分

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

使用道具 举报

 楼主| 发表于 2018-3-27 16:27:51 | 显示全部楼层
吴阿汤 发表于 2018-3-26 18:02
你说的x小于y的情况,就可以转换过来的。
另外,加注释的话用  ctrl+#就可以了。

谢谢您的答疑解惑,非常感谢,现在我明白了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-3-27 16:50:43 | 显示全部楼层
塔利班 发表于 2018-3-26 18:36
如果x比y小,t就是x一个运行后x,y互换

感谢您的回复哟
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-3-27 16:51:30 | 显示全部楼层
Zmynx_2017 发表于 2018-3-26 19:03
因为如果开始 x < y 的话,执行 t = x%y 后,t = x ;然后执行了 x = y , y = t,相当于把x 和y 的值互换 ...

没有荣誉和贡献啦,感谢回复哦
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-30 02:10

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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