24 求最大公约数,看不懂第二行代码

def **(x, y):
        return x if y == 0 else **(y, y % x)
print(**(5,10))

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


请先 登录 后评论

最佳答案 2021-09-23 23:09

  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能迴圈之外,函數本身也可以迴圈哦
复制代码
请先 登录 后评论

其它 2 个回答

恋狼
估计想用递归,但没写好。
请先 登录 后评论
Gui銘
这样做是完全可以的,这种方式叫做函数式编程(functional programming),lz可以查阅一下相关知识。
请先 登录 后评论
  • 4 关注
  • 1 收藏,541 浏览
  • 踏浪情歌 提出于 2021-09-23 23:09

相似问题