找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 3310|回复: 3

[求助] 求最大公约数,看不懂第二行代码

1

主题

1

帖子

1

积分

贫民

积分
1
唯爱丶雪 发表于 2021-3-12 23:54:36 | 显示全部楼层 |阅读模式
def **(x, y):
        return x if y == 0 else **(y, y % x)
print(**(5,10))

我知道y如果不等于0结果就是**(y,y % x),有问题的地方就是**不是自己定于的函数吗,为什么我们在自己定义的函数里面,调用自己,而且我看不懂了,这第二句语句在一直循环吗,懵了。
回复

使用道具 举报

0

主题

956

帖子

956

积分

圣骑士

积分
956
sheeboard 发表于 2021-3-15 13:37:47 | 显示全部楼层
估计想用递归,但没写好。
回复 支持 反对

使用道具 举报

1

主题

2

帖子

2

积分

贫民

积分
2
MNotL 发表于 2021-3-16 16:57:23 | 显示全部楼层
这样做是完全可以的,这种方式叫做函数式编程(functional programming),lz可以查阅一下相关知识。
回复 支持 反对

使用道具 举报

0

主题

102

帖子

102

积分

侠客

积分
102
傻眼貓咪 发表于 2021-8-4 16:33:31 | 显示全部楼层
本帖最后由 傻眼貓咪 于 2021-8-4 16:36 编辑
  1. # 這裡就是函數內部自己調用自己,
  2. # 簡單的說:就是如果未達到某種條件,就一直'改變參數'然後'繼續執行'函數

  3. # 這是你所看到的代碼:
  4. def func(x, y):
  5.     return x if y == 0 else func(y, y%x)

  6. print(func(5, 10))

  7. # 其實代碼也可以這樣寫:
  8. x = 5
  9. y = 10
  10. while True:
  11.     if y == 0: # 這就是某種條件
  12.         temp = x
  13.         break
  14.     else: # 如果不滿足條件,就一直改變參數,然後執行
  15.         temp = x
  16.         x = y
  17.         y = y%temp

  18. print(temp)

  19. # 打個比方:如果你煮一道菜,不夠咸,你就會一直加鹽,直到咸度夠為止

  20. # 煮一道菜:函數
  21. # 不夠咸:條件
  22. # 鹽:參數

  23. # 所以除了while和for能迴圈之外,函數本身也可以迴圈哦
复制代码
回复 支持 反对

使用道具 举报

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

本版积分规则

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