我需要我的函数使用LISP while循环和欧几里德算法返回给定输入的GCD,我得到的输出是0 &g



(defun GCD (n m))返回任意两个输入值的gcd。"设((被除数n)(被除数m)(余数1))(气孔导度((在n m)(gcd m n))((& lt;n m)(while(/=余数0)(setq余数(%被除数))(setq除数)(setq除数余数)(princ除数)))))

(gcd 12 18)00

我真的不知道你的代码出了什么问题。然而,我不认为你的方法是最好的,如果我们考虑lisp语言。最好写一个递归函数:这样更短,更漂亮。

(defun gcd (n m)
(cond ((< n m) (gcd m n))
((= m 0) n)
(t (gcd m (% n m)))))

重点是尾部递归的概念,它实际上是一个公平的循环,而不是这个递归函数,所以你不会得到任何堆栈溢出错误。

最新更新