2014-02-17 5 views
0

Является ли эта рекурсия хвостом? Я думаю, что это так, но я не уверен. Кроме того, когда я запускаю программу, если я ввожу список (1 2 3), его вывод равен (4 3 2). Почему это ? Любая помощь будет оценена. Спасибо.Что это за рекурсия?

 (define (add1-iter a-list) 
    (define (add1-helper curr-list result-list) 
    (if (null? curr-list) 
     result-list 
    (add1-helper (cdr curr-list) 
       (cons (add1 (car curr-list)) 
         result-list)))) 
    (add1-helper a-list '())) 
+2

Почему вы отредактировали свой вопрос, чтобы удалить весь код, после того, как Sylwester потратил время на его ответ? –

+0

Я просто отбросил редактирование, чтобы восстановить код. –

ответ

3

Это рекурсия хвоста.

У вас есть накопитель (список результатов), который вы создаете из списка до конца, когда вы итерируете элементы в источнике от начала до конца. Невозможно получить тот же порядок с хвостовой рекурсией.