誰でもこれで私を助けてくれますか?
(define f (lambda (x)
(cond
((null? x) 0)
(#t (+ (* (car x) (car x)) (f (cdr x)))))))
この関数が末尾再帰かどうかわかりませんでしたか? もしそうなら、その理由は何ですか?
誰でもこれで私を助けてくれますか?
(define f (lambda (x)
(cond
((null? x) 0)
(#t (+ (* (car x) (car x)) (f (cdr x)))))))
この関数が末尾再帰かどうかわかりませんでしたか? もしそうなら、その理由は何ですか?
関数が戻る前に最後に行うことは evaluate であるため、末尾再帰ではありません(+ ...)
。末尾再帰にするためには、戻る前の最後の操作を再帰呼び出しにする必要があります。
通常、関数の末尾を再帰的にするには、アキュムレータ パラメーターを受け取るヘルパー関数が必要です。
(define f0 (lambda (x acc)
(if (null? x)
acc
(f0 (cdr x) (+ acc (* (car x)(car x)))))))
(define f (lambda (x)
(f0 x 0)))