Люди, имеющие опыт программирования, должны быть знакомы с рекурсивными функциями. Мы часто используем рекурсию для решения ряда сложных задач. Рекурсивные алгоритмы очень эффективны для большинства задач, а также могут оптимизировать наш код. при использовании рекурсии:
1) Рекурсия — это вызов самой функции внутри самой функции.
2) Эффективность рекурсии относительно невысока, и ее не рекомендуется использовать, если есть ограничение по времени.
3) В рекурсивном процессе должно быть четкое условие завершения, то есть рекурсивный выход.
Давайте подробно объясним рекурсивные функции ниже.
Давайте сначала рассмотрим простое использование рекурсии на примере:
m=int(input('Введите число:'))deftest(x):x+=2ifx<100:test(x)else:print('Последний x равен:',x)test(m)
Результат:
Введите число: 20 и последний x: 100.
Давайте проанализируем этот пример. Сначала в первой строке кода мы вводим целое число. В последней строке m передается в качестве фактического параметра методу test(). 2, а затем решение: если значение x меньше 100, вызовите эту функцию еще раз. При вызове текущее значение x используется в качестве фактического параметра для участия в вызове. Рекурсия заканчивается, когда x>. =100 удовлетворен.
Посмотрите на диаграмму ниже:
То есть, если условия не выполняются, он возвращается на самый внешний уровень и вызывает эту функцию.
Когда речь идет о классических задачах рекурсивных алгоритмов, последовательность Фибоначчи и Ханойская башня всегда неразделимы. Здесь мы объясним, как использовать рекурсию для решения последовательности Фибоначчи.
Прежде всего, нам нужно знать, что рекурсивная формула последовательности Фибоначчи: F(n)=F(n-1)+F(n-2), F(1) и F(2) равны 1. Мы можно использовать рекурсию, чтобы найти значение элемента в последовательности Фибоначчи.
Есть много способов, которые мы можем использовать для решения задач о последовательности Фибоначчи.
Сначала мы используем широко используемый рекурсивный метод для решения этой проблемы:
N=int(input(введите количество элементов, которые нужно получить:))deffibonacci(n):ifn<=2:#Если оно меньше или равно 2, установите n равным 1 return1else:returnfibonacci(n-1) +fibonacci(n-2)print («Соответствующее значение равно»,fibonacci(n))
Результат:
Введите количество предметов, которые вы хотите получить: 4 соответствует 3
Для этого метода рекурсивного вызова, когда мы вводим значение 4, следующие операции будут выполняться рекурсивно:
фибоначчи(3)+фибоначчи(2)=фибоначчи(2)+фибоначчи(1)+фибоначчи(2)
Тогда мы видим, что значение четвертого члена равно 1+1+1=3.
На самом деле этот метод решения — пустая трата времени, поскольку требуется слишком много итераций. Для решения этой задачи мы также можем использовать пространство вместо времени.
Код выглядит следующим образом:
n=int(input(введите количество получаемых терминов:))fibonacci=[1,1]foriinrange(2,n):fibonacci.append(fibonacci[i-1]+fibonacci[i-2])print ('Соответствующее значение',fibonacci[n-1])
Результат:
Введите количество предметов, которые вы хотите получить: 4 соответствует 3
Таким образом, мы сначала указываем значения первых двух элементов в списке, а затем для количества n элементов, которые мы хотим решить, мы напрямую заполняем список чисел Фибоначчи до нужного нам элемента через формулу: и, наконец, в соответствии с индексом. Значение напрямую находит соответствующий выходной результат.
Вот и все, что касается рекурсивной функции. Как упоминалось выше, мы должны обратить особое внимание на рекурсивный выход и ограничения по времени. Во многих случаях использование рекурсивных методов приведет к остановке программы . превысить указанное время, в это время нам нужно изменить свое мышление, чтобы решить проблему. Второй метод, упомянутый выше, может помочь каждому решить проблему.