fjsboy 发表于 2022-10-4 00:24:35

1. 编写一个函数,利用欧几里得算法求最大公约数,

    def gcd(x, y):
      while y:
            t = x % y
            x = y      
            y = t

      return x
      
    print(gcd(4, 6))

每一步我都带入进去了就是不对啊。。。。我应该是逻辑出问题了。。。。求助 哪位大神把每一步都帮我解释下。。。。。谢谢

小伤口 发表于 2022-10-4 01:43:06

运行结果其实没问题吧{:9_241:},不过欧几里得是要用大的除小的,你需要在进行运算前保证被除数大于除数
有点不规范吧

qhxzf 发表于 2022-10-4 01:48:14

本帖最后由 qhxzf 于 2022-10-4 01:49 编辑


def gcd(x,y):
    while y:
      t = x % y
      x = y      
      y = t

    return x


print(gcd(4,6))


return应该是在while循环结束后返回,而不是执行一次就返回

qhxzf 发表于 2022-10-4 01:49:20

qhxzf 发表于 2022-10-4 01:48


return应该是在while循环结束后返回,而不是执行一次就返回

Twilight6 发表于 2022-10-4 07:28:29



看注释:

def gcd(x, y):
    # 传入参数 x = 4, y = 6
    # 当数值数据作为条件判断时,只要非 0 或 0.0 都视为 True
    # 所以这里第一次进入循环时,y = 6 符合循环条件
    while y:
      # 第一次循环开始,y = 6 符合循环条件,执行循环体
      # 第二次循环开始,y = 4 依旧符合循环条件,循环继续
      # 第三次循环开始,y = 2 不符合循环条件,退出循环

      t = x % y
      # 第一次循环,t = 4 % 6 = 4
      # 第二次循环,t = 6 % 4 = 2
      # 第三次循环,t = 4 % 2 = 0

      x = y
      # 第一次循环,x = y = 6
      # 第二次循环,x = y = 4
      # 第三次循环,x = y = 2

      y = t
      # 第一次循环结束:y = t = 4,开始下次循环
      # 第二次循环结束:y = t = 2,开始下次循环
      # 滴三次循环结束:y = t = 0,开始下次循环

    # 最终返回 x = 2
    return x


print(gcd(4, 6))

柿子饼同学 发表于 2022-10-4 08:19:57

# 递归版本 -- gcd( )

def gcd(x, y):
    if x == 0:
      return y
    return gcd(y % x, x)

print(gcd(6, 6))
页: [1]
查看完整版本: 1. 编写一个函数,利用欧几里得算法求最大公约数,