I denna handledning kommer vi att se Rekursion med exempel i Python. Rekursion i programmering är en mycket kraftfull teknik, det görs med funktioner som kallar sig själva, ser det som en slags loop, eftersom samma kod kommer att upprepas flera gånger, tills lösningen nåtts.
Egenskaper som en rekursiv funktion måste haBasfalletDet kommer att tillåta oss att avsluta funktionen någon gång, och att oändliga samtal inte sker.
Rekursivt fallI det här fallet kallar vi funktionen igen, men vi kommer närmare lösningen. Det kommer att se bättre ut i exemplen.
NoteraDet är viktigt att vara tydlig om basfallet och att veta att det rekursiva fallet närmar sig det och inte går in i ett tillstånd av oändliga samtal, det är ett vanligt fel när man börjar med rekursion.
Låt oss gå ner till exemplen, som kommer att vara enkla och korta så att de kan väl assimileras.
Exempel 1 - Faktoriskt
I det här exemplet kommer vi lösa faktorens talOm du vill veta vad factorial handlar om, besök den här länken. Här är koden, och nedan förklarar jag den rekursiva funktionen.
def factorial (nummer): if (number == 0 eller number == 1): return 1 else: return number * factorial (number-1) if __name__ == "__main__": try: num = int (input ("From Vilket tal vill du veta faktorn om? ")) If (num <0): print (" Antalet måste vara större än eller lika med 0 ") else: print (" The factorial of ", num," is ", factorial (num)) utom: print (" Ett nummer förväntas ")Vår rekursiva funktion har basfallet i if och den rekursiva i den andra. Du kan se att basfallet returnerar ett 1 och att detta uppnås när parametern som skickas till funktionen är 0 eller 1, när detta fall nås ringer funktionen inte igen. I det rekursiva fallet har vi ett anrop av funktionen till sig själv, men hur kan du se att parametern reduceras med 1 (vi kommer närmare basfallet). Den sista delen av koden utanför funktionen är bara ansvarig för att be användaren om ett nummer och kontrollera att det är större än eller lika med 0 för att ringa funktionen, eftersom fabriken med negativa nummer inte fungerar.
Om vi ringer till funktionen med siffran 4, det vill säga factorial (4), har vi följande samtal:
Ring 1: factorial (4) Call 2: 4 * factorial (3) Call 3: 3 * factorial (2) Call 4: 2 * factorial (1)När du ringer till factorial med 1 finns det inga fler samtal och det kommer att returnera 1, då returnerar denna funktion tillbaka resultaten till den funktion som jag kallar det, returen skulle vara så här:
faktor (1) = 1 faktor (2) = 2 * 1 faktor (3) = 3 * 2 faktor (4) = 4 * 6Och vi har redan vårt resultat, som är 24, från att multiplicera talen: 1 * 2 * 3 * 4. Därefter lämnar jag en skärmdump när jag ber om faktor 5, vilket inte är mer än att multiplicera 5 med faktor 4 (som vi redan vet är 24) vilket ger 120 som resultat. Du kan också se att om användaren sätter in talet fel, det är:
Exempel 2 - Addition / subtraktion
I det här exemplet lägger jag en rekursiv funktion för att göra en addition eller subtraktion, naturligtvis förekommer detta exempel vanligtvis inte i verkliga livet, men som ett exempel fungerar det:
def operation (nummer1, nummer2): if (nummer2 == 0): returnummer1 elif (nummer2 <0): returoperation (nummer1-1, nummer2 + 1) annars: returoperation (nummer1 + 1, nummer2-1) om __name__ == "__main__": print ("Adding 10 and 3:", operate (10, 3)) print ("Adding 5 and -2:", operate (5, -2))Här har vi ett basfall och 2 rekursiva fall, detta är att veta vilket sätt vi ska röra vid, eftersom vi måste agera annorlunda beroende på om antalet är positivt eller negativt. Operationsfunktionen tar emot 2 tal, och algoritmen tar hand om att subtrahera eller lägga till ett till nummer2 och överföra det till nummer1 (Om nummer2 är positivt, subtraherar jag 1 från nummer2 och lägger till det i nummer1), så tills variabeln nummer2 är lika till 0.
Till exempel kommer vi att lägga till 3 + 2 när vi ser samtalen.
Samtal 1: betjäna (3,2) Samtal 2: betjäna (4,1) Samtal 3: betjäna (5,0)I det här fallet, när vi får arbeta (5,0) finns det inget annat att göra, vi har resultatet direkt (till skillnad från fallet med den faktor som behövde göra multiplikationen). Här är resultatet av körningen av koden:
NoteraÄven om vi med rekursion har en elegant lösning och normalt kortare bör den användas när vi inte har något annat alternativ, om vi kan dra efter dess iterativa variant kommer det att vara ett bättre val, eftersom det förbrukar mindre minne och är vanligtvis snabbare.
Gillade du och hjälpte denna handledning?Du kan belöna författaren genom att trycka på den här knappen för att ge honom en positiv poäng