В този урок ще видим Рекурсия с примери в 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), няма какво друго да правим, имаме резултата директно (за разлика от случая с факториала, който трябваше да направи умножението). Ето резултата от изпълнението на кода:
ЗабележкаВъпреки че с рекурсия имаме елегантно решение и обикновено по -късо, то трябва да се използва, когато нямаме друга опция, но ако можем да издърпаме неговия итеративен вариант, това ще бъде по -добър избор, тъй като консумира по -малко памет и обикновено е по -бърз.
Хареса ли ви и помогнахте на този урок?Можете да възнаградите автора, като натиснете този бутон, за да му дадете положителна точка