1

16 進数の実際の値を生成する 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ます。したがって、現在hexは逆になっていますが、長さはまだ 9です。それが再帰が止まらない理由だと思います。

于 2013-03-04T02:00:18.370 に答える