Автор оригинала: Robin Andrews.
Это была темная ночь, ночь была темной, и грабители были в пещере. Один грабитель сказал другому, «расскажи нам сказку», и это история, которую он сказал …
Это была темная ночь, ночь была темной, и грабители были в пещере. Один грабитель сказал другому, «расскажи нам сказку», и это история, которую он сказал …
Рекурсия это мощный и увлекательный аспект информатики. Это может сделать, казалось бы, сложные проблемы почти тривиально простыми и много приложений, включая работу с Структуры данных деревьев , обратно , Найти перестановки , Файловая система навигации И гораздо больше, кроме. Это может быть тема, которая занимает некоторое время, чтобы понять и даже дольше для освоения. Поскольку это неотъемлемая часть всех продвинутых уровней компьютерных научно-технических слой, это хорошая идея, чтобы начать с нее в начале, чтобы его можно было пересмотреть и позже понять глубину.
С точки зрения обучения, хотя важно изучать рабочие примеры рекурсии, на самом деле не заменяет время, чтобы проводить время, пытаясь комировать рекурсивные решения самостоятельно. Эта статья получит вас.
Во-первых, введите эту короткую программу Python в свой любимый редактор и запустите его.
def countdown(n): if n <= 0: print("LIFTOFF!") else: print(n) countdown(n - 1) countdown(10)
Теперь вернитесь и посмотрите, можете ли вы понять код. В частности, посмотрите, можете ли вы идентифицировать Три закона рекурсии :
- Рекурсивный алгоритм должен иметь базовый случай.
- Рекурсивный алгоритм должен изменить его состояние и двигаться к базовому корпусу.
- Рекурсивный алгоритм должен вызывать себя рекурсивно.
Базовый чехол Выше это N
Отказ Без базового случая и движения к нему при каждом повторном вызове функций программа никогда не закончится – подобно тому, что происходит, когда вы пишете Хотя петля с условием, которое никогда не становится правдой.
С точки зрения базового интуитивного понимания, третий закон, вероятно, является наиболее важным:
Рекурсивная функция – это функция, которая называет себя.
Теперь вы видели рекурсивную функцию и получили некоторое понимание того, что они включают, пришло время для некоторой практики. Ниже приведены два упражнения, чтобы помочь вам развить свои навыки и понимание с рекурсией. Убедитесь, что вы дадите каждому действительно хорошо, попробуйте самостоятельно, прежде чем смотреть на решение, чтобы получить максимальную отдачу от упражнений.
Упражнение 1
Написать функцию, которая возвращает сумму положительных целых чисел до N
(1 + 2 + 3 + ... + N)
Думаю: Что такое базовый случай? Как я перейду к базовому делу? (Подсказка: вызывая функцию с другим параметром.)
# Recursive Sum def sum_recursive(n): assert n >= 0 if n < 1: return 0 return n + sum_recursive(n-1) assert sum_recursive(5) == 15 assert sum_recursive(10) == 55
Заметки:
Assert
это простой способ сделать простое тестирование – если утверждение не правда, вы получитеAssertionError
Так что, если вы этого не сделаете, ваш код ведет себя как ожидалось. Вы могли бы просто использоватьПечать (Sum_recursive (5))
Например и проверьте результаты самостоятельно.Мы могли бы назвать нашу функцию просто
сумма
Но это уже встроенная функция Python, поэтому не хорошая идея.
Упражнение 2
Напишите функцию, которая регулирует два (положительных) целых числа с использованием повторного добавления. Для получения дополнительной информации о том, как это работает математически, см. Эту статью.
# Recursive Multiplication def mult(a, b): if a == 1: return b else: return b + mult(a-1, b) assert mult(3, 6) == 18
Эти упражнения должны, надеяться, дадут вам больше опыта и уверенности в рекурсии. Однако, если вы все еще запутались, не волнуйтесь, Рекурсия Это тема, которую многие студенты находят трудности, и вам, возможно, нужно немного пациенту с собой и темой, пока не придет понимание. В будущей статье мы посмотрим на несколько чуть более сложных Рекурсивные алгоритмы Отказ Если вы нашли эту статью полезную, пожалуйста, дайте мне знать в комментариях ниже.