鱼C论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 2203|回复: 4

[已解决]Python 第十七课

[复制链接]
发表于 2017-5-21 11:36:50 | 显示全部楼层 |阅读模式

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

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

x
  1. def gcd(x,y):
  2.     while y:
  3.         z = x % y
  4.         x = y
  5.         y = z
  6.     return(z)
  7.         
复制代码


循环X为什么不行
最佳答案
2017-5-21 13:55:06
哦 忘了说 亲 你的return写错了,应该是return x,否则,结果应该永远是0

如果你看懂我解释的,那么循环x也就可以了,只是换了一个假设条件嘛,
原程序只要把循环语句改成:

    while x:
        z=y%x
        y=x
        x=z
    return y
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-5-21 13:49:43 | 显示全部楼层
1、从最大公约数的原理下手,x,y的最大公约数等于其中较小的那个数和两数相除取余的最大公约数。
    意思就是,要想得到x,y的最大公约数,先比较两个x,y大小。本案例循环用y,即假设y<x
   
2、当循环条件不成立,即y=0,执行return,返回x值。
    这里用的原理是:0和任何数的最大公约数都是任何数本身
   
3、当条件成立,执行循环语句,分析如下:
        (1)如果假设y<x成立
            z值是两数相除的余数,按照原理,再计算y和z的最大公约数就可以,
            即下一次循环,两个值应该是y和z的值,而z=x%y,所以,将y值替代x值,z值替代y值
        (2)如果假设y<x不成立
            小数x除大数y取余z,还是本身x,
            即z值是x原值,
            此时x=y,y=z,其实就是将y值给x,y值给x,实现大小互换,然后再返回情形(1)按照y<x进行循环

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

使用道具 举报

发表于 2017-5-21 13:55:06 | 显示全部楼层    本楼为最佳答案   
哦 忘了说 亲 你的return写错了,应该是return x,否则,结果应该永远是0

如果你看懂我解释的,那么循环x也就可以了,只是换了一个假设条件嘛,
原程序只要把循环语句改成:

    while x:
        z=y%x
        y=x
        x=z
    return y
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-5-26 17:56:44 | 显示全部楼层
21度深蓝梦境 发表于 2017-5-21 13:49
1、从最大公约数的原理下手,x,y的最大公约数等于其中较小的那个数和两数相除取余的最大公约数。
    意思 ...

假设的话X< y,不也可以吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-28 12:37:59 | 显示全部楼层
c17328 发表于 2017-5-26 17:56
假设的话X< y,不也可以吗

可以啊 反正思路原理是不变的 详细看3楼
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-27 15:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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