我要编写一个lisp程序来生成十六进制数的实际值。我编写了一个函数,但似乎得到了stackoverflow(深层)错误。我想知道是否有人能指出我的错误或指导我朝着正确的方向前进。
如果没有为此问题发布代码,我将不胜感激,因为这是家庭作业的一部分。因此,我只想解释或指示我可能出错的地方。
我觉得我的问题是我的递归没有终止,但我不知道如何解决它。
这是我的代码:
(defun calc (hex)
(if hex
(if (> (length hex) 1)
( + (first (reverse hex)) (* 16 (calc (reverse hex)))) hex)))
提前致谢。
答案 0 :(得分:3)
“基本情况”(递归实际停止的情况/状态)是hex
的长度为1或更小。告诉我,每次再次致电calc
时,calc
的输入是否会越来越小?如果没有,那么从数学上讲,输入无法达到基本情况。
假设hex
以长度9开头。当您再次拨打calc
时,您已撤消hex
。所以现在hex
被反转,但它的长度仍为9 。我怀疑这就是为什么递归永远不会停止。