Функции, реализованные с помощью рекурсии, можно использовать с циклами. По сути, когда вещь определяется сама по себе, происходит рекурсия.
PHP — это аббревиатура от препроцессора гипертекста PHP. Это пример рекурсии. В python рекурсия происходит, когда функция определена сама по себе.
Структура рекурсивной функции приведена ниже.
def recursive_function(arguments):
if breaking_condition == True :
#Calculate result
return result
return recursive_function(arguments_for_further_operation)
Ряд Фибоначчи в основном представляет собой последовательность. В этой последовательности каждое число является суммой двух предыдущих чисел в этой последовательности. Первые два числа в ряду — это либо 0 и 1, либо 1 и 1. В нашем примере мы считаем, что 0 и 1 — это первые два числа. Итак, первые номера этой серии.
0 1 1 2 3 5 8 13 21 34
Мы видим, что:
- 1-е число Фибоначчи = 0 (по предположению);
- 2-е число Фибоначчи = 1 (по предположению);
- 3-е число Фибоначчи = 1-е + 2-е = 0 + 1 = 1;
- 4-е число Фибоначчи = 2-е + 3-е = 1 + 1 = 2;
- 5-е число Фибоначчи = 3-е + 4-е = 1 + 2 = 3;
- 6-е число Фибоначчи = 4-е + 5-е = 2 + 3 = 5;
n-е число Фибоначчи = (n-1) -ое число Фибоначчи + (n-2) -ое число Фибоначчи.
Ниже приведен код для реализации функции Фибоначчи:
def Fibonacci(pos):
#check for the terminating condition
if pos <= 1 :
#Return the value for position 1, here it is 0
return 0
if pos == 2:
#return the value for position 2, here it is 1
return 1
#perform some operation with the arguments
#Calculate the (n-1)th number by calling the function itself
n_1 = Fibonacci( pos-1 )
#calculation the (n-2)th number by calling the function itself again
n_2 = Fibonacci( pos-2 )
#calculate the fibo number
n = n_1 + n_2
#return the fibo number
return n
#Here we asking the function to calculate 5th Fibonacci
nth_fibo = Fibonacci( 5 )
print (nth_fibo)
Преимущества рекурсии
Реализация чего-либо с использованием рекурсии требует меньше усилий. Код, который вы пишете с помощью рекурсии, будет сравнительно меньше, чем код, который вы пишете с помощью циклов. Опять же, код, написанный с использованием рекурсии, также легче понять.
Недостатки рекурсии
Рекурсия требует большего количества вызовов функций. Каждый сохраняет переменную состояния в стеке программы. Если ваш код требует слишком много вызовов функций, он потребляет слишком много памяти. Таким образом, могут быть возможности вызвать переполнение памяти, если ваш код не так эффективен. Опять же, вызов функции занимает некоторое время. Если задача функции завершена, она вызывает родительскую функцию, что также требует некоторого времени для повторного выполнения данной функции из предыдущего состояния. Таким образом, рекурсивной функции требуется больше времени для выполнения своей задачи. Кроме того, отладка рекурсивной функции в большинстве случаев более сложна.