Rekurssio
Rekursio on ohjelmointitekniikka, jossa funktio kutsuu itseään ratkaistakseen ongelman pienemmissä osissa. Se on erityisen hyödyllinen ongelmissa, joissa on toistuva rakenne tai luonnollisia osatehtäviä.
Keskeiset rekursion osat ovat:
- Perustapaus: ehto, joka pysäyttää rekursion;
- Rekursiivinen tapaus: kohta, jossa funktio kutsuu itseään yksinkertaisemmalla syötteellä.
Miksi käyttää rekursiota?
Jotkin ongelmat voidaan luontevasti ilmaista pienempien osatehtävien kautta. Rekursio tarjoaa selkeän ja elegantin tavan ratkaista nämä antamalla funktion kutsua itseään käsittelemään yksinkertaisempia tapauksia. Sitä käytetään yleisesti tehtävissä, kuten puiden käsittelyssä, polkujen tutkimisessa tai rakenteiden (esim. listat, merkkijonot) purkamisessa.
1234567def print_message(message, times): if times > 0: # Base case: stop when times is 0 print(message) print_message(message, times - 1) # Recursive case # Function call print_message("Hello, Recursion!", 3)
Etene askel askeleelta ymmärtääksesi, miten tämä rekursiivinen ohjelma toimii:
- Ehtotarkistus: jos
times > 0, funktio jatkaa. Tässä tapauksessatimes = 3, joten ehto on tosi; - Viestin tulostus: funktio tulostaa
"Hello, Recursion!"; - Rekursiivinen kutsu: funktio kutsuu itseään arvolla
times - 1; - Toisto: tämä prosessi jatkuu, kunnes
timeson 0; - Päättyminen: kun ehto
times > 0ei enää täyty, rekursio päättyy ja ohjelma suoritetaan loppuun.
Tulos: Viesti "Hello, Recursion!" tulostetaan kolme kertaa.
Suorituksen kulku:
Joka kerta, kun funktio kutsuu itseään, se lisää uuden kehyksen kutsupinoon (muistirakenne, joka seuraa aktiivisia funktiokutsuja). Funktio jatkaa itseään pienemmällä times-arvolla. Kun perusehto (times == 0) saavutetaan, suoritus pysähtyy. Tämän jälkeen jokainen aiempi kutsu valmistuu yksi kerrallaan käänteisessä järjestyksessä. Tämä takaisinpäin eteneminen on olennainen osa rekursion toimintaa.
Swipe to start coding
Annetaan merkkijono, joka edustaa puhelinnumeroa ja voi sisältää välilyöntejä, viivoja, sulkuja tai muita ei-numeerisia merkkejä. Tavoitteena on poimia vain numerot rekursion avulla.
- Jos syötemerkkijono
numberon tyhjä, palauta tyhjä merkkijono. - Tarkista, onko merkkijonon
numberensimmäinen merkki numero käyttämälläisdigit()-metodiaif-ehdossa. - Jos se on numero, yhdistä se rekursiivisen kutsun tulokseen funktiolle
format_phone_number, välittäen alimerkkijono alkaen toisesta merkistä. - Jos se ei ole numero, tee rekursiivinen kutsu funktiolle
format_phone_number, ohittaen ensimmäinen merkki.
Ratkaisu
Kiitos palautteestasi!
single
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme
Can you explain what happens if there is no base case in a recursive function?
Can you show another example of recursion with a different problem?
What are some common mistakes to avoid when using recursion?
Awesome!
Completion rate improved to 4.17
Rekurssio
Pyyhkäise näyttääksesi valikon
Rekursio on ohjelmointitekniikka, jossa funktio kutsuu itseään ratkaistakseen ongelman pienemmissä osissa. Se on erityisen hyödyllinen ongelmissa, joissa on toistuva rakenne tai luonnollisia osatehtäviä.
Keskeiset rekursion osat ovat:
- Perustapaus: ehto, joka pysäyttää rekursion;
- Rekursiivinen tapaus: kohta, jossa funktio kutsuu itseään yksinkertaisemmalla syötteellä.
Miksi käyttää rekursiota?
Jotkin ongelmat voidaan luontevasti ilmaista pienempien osatehtävien kautta. Rekursio tarjoaa selkeän ja elegantin tavan ratkaista nämä antamalla funktion kutsua itseään käsittelemään yksinkertaisempia tapauksia. Sitä käytetään yleisesti tehtävissä, kuten puiden käsittelyssä, polkujen tutkimisessa tai rakenteiden (esim. listat, merkkijonot) purkamisessa.
1234567def print_message(message, times): if times > 0: # Base case: stop when times is 0 print(message) print_message(message, times - 1) # Recursive case # Function call print_message("Hello, Recursion!", 3)
Etene askel askeleelta ymmärtääksesi, miten tämä rekursiivinen ohjelma toimii:
- Ehtotarkistus: jos
times > 0, funktio jatkaa. Tässä tapauksessatimes = 3, joten ehto on tosi; - Viestin tulostus: funktio tulostaa
"Hello, Recursion!"; - Rekursiivinen kutsu: funktio kutsuu itseään arvolla
times - 1; - Toisto: tämä prosessi jatkuu, kunnes
timeson 0; - Päättyminen: kun ehto
times > 0ei enää täyty, rekursio päättyy ja ohjelma suoritetaan loppuun.
Tulos: Viesti "Hello, Recursion!" tulostetaan kolme kertaa.
Suorituksen kulku:
Joka kerta, kun funktio kutsuu itseään, se lisää uuden kehyksen kutsupinoon (muistirakenne, joka seuraa aktiivisia funktiokutsuja). Funktio jatkaa itseään pienemmällä times-arvolla. Kun perusehto (times == 0) saavutetaan, suoritus pysähtyy. Tämän jälkeen jokainen aiempi kutsu valmistuu yksi kerrallaan käänteisessä järjestyksessä. Tämä takaisinpäin eteneminen on olennainen osa rekursion toimintaa.
Swipe to start coding
Annetaan merkkijono, joka edustaa puhelinnumeroa ja voi sisältää välilyöntejä, viivoja, sulkuja tai muita ei-numeerisia merkkejä. Tavoitteena on poimia vain numerot rekursion avulla.
- Jos syötemerkkijono
numberon tyhjä, palauta tyhjä merkkijono. - Tarkista, onko merkkijonon
numberensimmäinen merkki numero käyttämälläisdigit()-metodiaif-ehdossa. - Jos se on numero, yhdistä se rekursiivisen kutsun tulokseen funktiolle
format_phone_number, välittäen alimerkkijono alkaen toisesta merkistä. - Jos se ei ole numero, tee rekursiivinen kutsu funktiolle
format_phone_number, ohittaen ensimmäinen merkki.
Ratkaisu
Kiitos palautteestasi!
single