Перейти к содержанию

01 · Натуральные числа: ноль, следующий и рекурсия

Натуральные числа: ноль, следующий и рекурсия

Представьте каждое натуральное число нулём или следующим и прочитайте равенство и сложение из этих случаев.

Перед этой главой

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

После главы вы сможете
  • объяснить своими словами математическое определение «Натуральные числа: ноль, следующий и рекурсия»
  • показать его представление в данных Python
  • предсказать небольшой запуск по настоящему коду
Математическое определение

Ноль и операция следующего входят в исходные идеи Пеано. `n + 0 = n` и `n + S(m) = S(n + m)` — рекурсивные определения сложения.

Представление данных

`pre=None` означает ноль, `pre=n` — `S(n)`. Число 2 хранится цепочкой `S(S(0))`, а не полем int.

Реализация на Python

`0` / `S(n)` → `NaturalNumber.pre`; recursive addition → `__add__`

Реализация и тесты для параллельного чтения

peano/natural_number.py · tests/test_natural_number.py

Математическое определение

Математическое определение

Ноль и операция следующего входят в исходные идеи Пеано. n + 0 = n и n + S(m) = S(n + m) — рекурсивные определения сложения.

Представление данных

Представление данных

pre=None означает ноль, pre=n — S(n). Число 2 хранится цепочкой S(S(0)), а не полем int.

Реализация на Python

Реализация на Python

__eq__ различает ноль и следующий и сравнивает предшественников; ветви __add__ точно соответствуют двум формулам.

Точное соответствие, используемое в курсе:

`0` / `S(n)` → `NaturalNumber.pre`; recursive addition → `__add__`

Ход выполнения

Ход выполнения

В 2 + 2 правый аргумент уменьшается до нуля. При возврате сначала появляется базовый случай, затем внешние вызовы.

Прогноз перед запуском

Запишите базовую строку, последнюю рекурсивную строку и итог.

Эксперимент · Натуральные числа: ноль, следующий и рекурсия Не запущено
⌘ / Ctrl + Enter
Вывод
Сначала запишите прогноз, затем запускайте.

Проверка тестами

Проверка тестами

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

Область и ограничения

Область и ограничения

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

Какое утверждение верно описывает реализацию «Натуральные числа: ноль, следующий и рекурсия»?