Рубрики
Без рубрики

Введение в рекурсию в Python

Введение в рекурсию на уровень компьютерной науки. Примеры находятся в Python.

Автор оригинала: 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

Эти упражнения должны, надеяться, дадут вам больше опыта и уверенности в рекурсии. Однако, если вы все еще запутались, не волнуйтесь, Рекурсия Это тема, которую многие студенты находят трудности, и вам, возможно, нужно немного пациенту с собой и темой, пока не придет понимание. В будущей статье мы посмотрим на несколько чуть более сложных Рекурсивные алгоритмы Отказ Если вы нашли эту статью полезную, пожалуйста, дайте мне знать в комментариях ниже.