Это основано на уроке, который я учился в курсе Введение в компьютерную науку и программирование с использованием Python на edx. Это о итерационных против рекурсивных функциях. Разница, как и я понимаю, это то, что итерация несколько раз выполняет несколько строк кода, пока не будет выполнено условие, пока не будет выполнено рекурсивная функция, пока не будет выполнено определенное условие. В этом примере я буду использовать один из каждого, чтобы рассчитать простую функцию питания ^ ex), но вместо того, чтобы использовать Python встроенную функцию экспоненты (**), эти функции будут рассчитать результат, умножая базовое время по себе exp. Это, я признаю, избыточно и, возможно, не очень полезно, но это обучающее упражнение.
Я начну с итеративного примера. Код сначала, тогда я сделаю некоторые наблюдения.
def iterPower(base, exp): ''' base: int or float. exp: int >= 0 returns: int or float, base^exp ''' result = 1 i=exp while i > 0: result = result * base i -= 1 return result
Раньше я использовал цикл с условием, что он выполняет, пока индекс, я больше нуля. Этот индекс начинается со значением показателя, который равен количеству временных базы, которые необходимо умножить сам по себе. При каждом исполнении цикла Exp отсчитывается на один, а вариабельный результат умножается на базу. Я устанавливаю начальную величину результата к 1 по двум причинам. Во-первых, если ввод EXP равен 0, цикл While не будет выполнен, и нам нужен способ для функции вернуть правильный ответ, 1. Кроме того, результат настройки к 1 инициализирует вариабельный результат так, чтобы его можно было умножить на базу в цикле пока. Функция затем возвращает результат.
TLDR: Цветная петля позволяет размножаться по себе основы на себя.
Далее рекурсивный пример:
def recurPower(base, exp): ''' base: int or float. exp: int >= 0 returns: int or float, base^exp ''' if exp == 0: return 1 else: return base * recurPower(base,exp-1)
На этот раз репетиции умножения основания само по себе достигаются путем вызова функции Recurpower внутри себя. Каждый раз, когда программа вызывается, переменная exp уменьшается на один, прежде чем подавать в следующий экземпляр функции. Туннель функций внутри функций достигает своего конца, когда EXP равен нулю. Обратите внимание, что если вход Exp равен нулю, функция просто возвращает 1 и вообще не выполняет себя. Я думаю, что эта версия является уборщиком для чтения, но вначале немного сложнее понять. Это сложно отслеживать, в вашей голове, из нескольких экземпляров функции, называемой друг в друге.
Ну, я надеюсь, что вы узнали что-то. Я, конечно, сделал, как я написал это.
Слияние Я новичок в этом сообществе, и я рад, что это место, где я чувствую себя комфортно, рисую на 1. Написание предмета, который я только начинаю учиться, и 2. Написать то, что является довольно основным примером.
P.P.S. Это мой первый раз публикация в Markdown, и мне это нравится. Это было легко, а выход выглядит очень красиво.
Оригинал: “https://dev.to/ekand/recursive-v-iterative-function-51b4”