1

我要编写一个 lisp 程序来生成十六进制数的实际值。我已经编写了一个函数,但似乎遇到了 stackoverflow (deep) 错误。我想知道是否有人可以指出我的错误或指导我正确的方向。

如果没有为这个问题发布代码,我将不胜感激,因为这是家庭作业的一部分。因此,我只想要一个可能出错的解释或方向。

我觉得我的问题是我的递归没有终止,但我不知道如何解决它。

这是我的代码:

(defun calc (hex)
  (if hex
    (if (> (length hex) 1)
     ( + (first (reverse hex)) (* 16 (calc (reverse hex)))) hex))) 

提前致谢。

4

1 回答 1

3

“基本情况”(递归实际停止的情况/状态)是hex长度为 1 或更少。告诉我,每次你calc再次调用时,输入calc是否越来越小?如果不是,那么输入在数学上是不可能达到基本情况的。

假设hex从长度 9 开始。当您calc再次调用时,您已反转hex。所以 nowhex是相反的,但它的长度仍然是 9。我怀疑这就是为什么递归永远不会停止的原因。

于 2013-03-04T02:00:18.370 回答