我认识到输出中有一个明显的模式,我只是想知道为什么当我尝试运行任何 > 52 的东西时 lispbox 的 REPL 会中止。此外,任何关于改进代码的建议都非常受欢迎。^-^
(defun count-reduced-fractions (n d sum)
(setf g (gcd n d))
(if (equal 1 d)
(return-from count-reduced-fractions sum)
(if (zerop n)
(if (= 1 g)
(count-reduced-fractions (1- d) (1- d) (1+ sum))
(count-reduced-fractions (1- d) (1- d) sum))
(if (= 1 g)
(count-reduced-fractions (1- n) d (1+ sum))
(count-reduced-fractions (1- n) d sum)))))
我打电话时得到的一切
(count-reduced-fractions 53 53 0)
是
;评估中止
这对我来说没有多大意义,考虑到它会在低于此的所有数字上运行(并返回准确的结果),而且我可以(如果我愿意)在我的头脑中、纸上或一行上做 53一次在 lisp 中。我什至测试了许多大于 53 的不同数字,以确保它不是特定于 53。没有任何效果。