sicp.io
1.2.1 · Процедуры и порождаемые ими процессы

Ответ как последний кадр процесса

Две процедуры могут вычислять одну и ту же математическую функцию, порождая совершенно разные вычислительные процессы.

Вопрос для размышления

Чем рекурсивный процесс отличается от итеративного?

  • Различение рекурсивного синтаксиса и роста рекурсивного процесса
  • Распознавание явного состояния, переносимого итеративным процессом
  • Использование трассы выполнения с фиксированным пределом для исследования формы процесса

Рекурсивная версия откладывает умножение до тех пор, пока не вернется меньший factorial. Объем отложенной работы растет с ростом n. Итеративная версия переносит промежуточное произведение и счетчик как полное состояние.

Оба определения являются рекурсивными процедурами, поскольку каждое из них вызывает само себя. Только второе порождает итеративный процесс, состояние которого можно описать фиксированным числом переменных.

Код SICP170 из 1,048,576 байт UTF-8
Примеры
Результат
Вывод
Значение
Диагностика
Трасса выполнения0 / 0 событий
    Запуски происходят внутри браузера с отображением результата программы и трассы выполнения.
    Ожидаемый результат

    Обе программы возвращают 40320.

    На что обратить внимание в трассе

    Сравните порядок вызовов и умножений. Трасса выполнения с фиксированным пределом точно фиксирует работу, выполненную для этих выбранных входных данных.

    Попробуйте сами

    Измените программу и сравните результат.

    Запустите оба примера со значением 5. Для итеративной версии выпишите n и product перед каждым вызовом.

    Показать подсказку

    На каждом шаге произведение product на факториал n остается равным значению исходной задачи вычисления факториала.

    Завершить этот урок

    В этой главе пройдено 0 из 18 уроков0%