Рекурсивни функции в Python

В този урок ще видим Рекурсия с примери в Python. Рекурсията в програмирането е много мощна техника, тя се извършва с функции, които се извикват, виждат я като своеобразен цикъл, тъй като един и същ код ще се повтаря няколко пъти, докато се стигне до решението.

Характеристики, които трябва да притежава рекурсивна функцияОсновен случайТова ще ни позволи да прекратим функцията в даден момент и че не се случват безкрайни обаждания.
Рекурсивен случайВ този случай извикваме функцията отново, но ще се доближим до решението. В примерите ще изглежда по -добре.

ЗабележкаВажно е да сте наясно с базовия случай и да знаете, че рекурсивният случай се доближава до него и не влиза в състояние на безкрайни обаждания, това е често срещана грешка при започване с рекурсия.

Нека се спрем на примерите, които ще бъдат прости и кратки, за да могат да бъдат добре усвоени.

Пример 1 - Факториално


В този пример ще го направим решаване на факториала на числоАко искате да знаете за какво се отнася факториалът, посетете тази връзка. Ето кода и по -долу обяснявам рекурсивната функция.
 def factorial (number): if (number == 0 или number == 1): return 1 else: return number * factorial (number-1) if __name__ == "__main__": try: num = int (input ("От Кое число искате да знаете факториала на? ")) If (num <0): print (" Числото трябва да бъде по -голямо или равно на 0 ") else: print (" The factorial of ", num," is ", factorial (num)) с изключение на: print (" Очаква се число ") 
Нашата рекурсивна функция има основен случай в if и рекурсивна в else. Можете да видите, че основният случай връща 1 и че това се достига, когато параметърът, предаден на функцията, е 0 или 1, когато този случай е достигнат, функцията не извиква отново. В рекурсивния случай имаме извикване на функцията към себе си, но как можете да видите намаляване на параметъра с 1 (ние се доближаваме до базовия случай). Последната част от кода извън функцията отговаря само за това да поиска от потребителя номер и да провери дали е по -голямо или равно на 0 за извикване на функцията, тъй като факториалът с отрицателни числа не работи.

Ако извикаме функцията с номер 4, тоест факториал (4), имаме следните извиквания:

 Извикване 1: факториал (4) Повикване 2: 4 * факториал (3) Повикване 3: 3 * факториал (2) Повикване 4: 2 * факториал (1)
Когато извиквате факториал с 1, няма повече извиквания и той ще върне 1, тогава тази функция връща връщане на резултатите към функцията, която я наричам, връщането ще бъде така:
 факториал (1) = 1 факториал (2) = 2 * 1 факториал (3) = 3 * 2 факториал (4) = 4 * 6
И вече имаме нашия резултат, който е 24, от умножаване на числата: 1 * 2 * 3 * 4. След това оставям екранна снимка, когато искам факториал на 5, което не е нищо повече от умножаване на 5 по факториала на 4 (което вече знаем, че е 24), което дава в резултат 120. Можете също да видите, че ако потребителят вмъкне числото погрешно, това е:

Пример 2 - Добавяне / изваждане


В този пример поставям рекурсивна функция, за да направя събиране или изваждане, разбира се този пример обикновено не се среща в реалния живот, но като пример работи:
 def операция (номер1, число2): ако (число2 == 0): връщане номер1 elif (число2 <0): връщане операция (номер1-1, число2 + 1) иначе: връщане операция (номер1 + 1, номер2-1) ако __name__ == "__main__": print ("Добавяне на 10 и 3:", операция (10, 3)) печат ("Добавяне на 5 и -2:", работа (5, -2)) 
Тук имаме основен случай и 2 рекурсивни случая, това е, за да знаем по какъв начин да се докоснем, тъй като в зависимост от това дали числото е положително или отрицателно, ще трябва да действаме по различен начин. Функцията операция получава 2 числа и алгоритъмът ще се погрижи за изваждане или добавяне на едно към число 2 и предаването му на число 1 (Ако число 2 е положително, изваждам 1 от число2 и го добавям към число1), така че докато променливата номер2 е равна до 0.

Например ще добавим 3 + 2, като виждаме обажданията.

 Обадете се 1: работете (3,2) Обадете се 2: работете (4,1) Обадете се 3: работете (5,0)
В този случай, когато стигнем до опериране (5,0), няма какво друго да правим, имаме резултата директно (за разлика от случая с факториала, който трябваше да направи умножението). Ето резултата от изпълнението на кода:

ЗабележкаВъпреки че с рекурсия имаме елегантно решение и обикновено по -късо, то трябва да се използва, когато нямаме друга опция, но ако можем да издърпаме неговия итеративен вариант, това ще бъде по -добър избор, тъй като консумира по -малко памет и обикновено е по -бърз.

Хареса ли ви и помогнахте на този урок?Можете да възнаградите автора, като натиснете този бутон, за да му дадете положителна точка
wave wave wave wave wave