Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Rekurssio | Rekursio ja Lambda-Funktiot
Python-Funktioiden Opas

bookRekurssio

Note
Määritelmä

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ä.

Rekursion keskeiset osat ovat:

  • Perustapaus: ehto, joka pysäyttää rekursion;
  • Rekursiivinen tapaus: osa, jossa funktio kutsuu itseään yksinkertaisemmalla syötteellä.

Miksi käyttää rekursiota?

Jotkin ongelmat voidaan luontevasti ilmaista pienempien osatehtävien avulla. 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) pilkkomisessa.

1234567
def 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)
copy

Käydään askel askeleelta läpi, miten tämä rekursiivinen ohjelma toimii:

  1. Ehtotarkistus: jos times > 0, funktio jatkaa. Tässä tapauksessa times = 3, joten ehto on tosi;
  2. Viestin tulostus: funktio tulostaa "Hello, Recursion!";
  3. Rekursiivinen kutsu: funktio kutsuu itseään arvolla times - 1;
  4. Toisto: tämä prosessi jatkuu, kunnes times on 0;
  5. Päättyminen: kun ehto times > 0 ei enää täyty, rekursio päättyy ja ohjelma suorittuu 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.

Tehtävä

Swipe to start coding

Annettuna merkkijono, joka edustaa puhelinnumeroa ja saattaa sisältää välilyöntejä, viivoja, sulkuja tai muita ei-numeerisia merkkejä. Tavoitteena on poimia vain numerot rekursion avulla.

  1. Jos syötemerkkijono number on tyhjä, palautetaan tyhjä merkkijono.
  2. Tarkista, onko merkkijonon number ensimmäinen merkki numero käyttämällä isdigit()-metodia if-ehdossa.
  3. Jos se on numero, yhdistä se rekursiivisen kutsun tulokseen funktiolle format_phone_number, välittäen alimerkkijono alkaen toisesta merkistä.
  4. Jos se ei ole numero, tee rekursiivinen kutsu funktiolle format_phone_number, ohittaen ensimmäinen merkki.

Ratkaisu

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 5. Luku 1
single

single

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme

close

Awesome!

Completion rate improved to 4.35

bookRekurssio

Pyyhkäise näyttääksesi valikon

Note
Määritelmä

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ä.

Rekursion keskeiset osat ovat:

  • Perustapaus: ehto, joka pysäyttää rekursion;
  • Rekursiivinen tapaus: osa, jossa funktio kutsuu itseään yksinkertaisemmalla syötteellä.

Miksi käyttää rekursiota?

Jotkin ongelmat voidaan luontevasti ilmaista pienempien osatehtävien avulla. 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) pilkkomisessa.

1234567
def 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)
copy

Käydään askel askeleelta läpi, miten tämä rekursiivinen ohjelma toimii:

  1. Ehtotarkistus: jos times > 0, funktio jatkaa. Tässä tapauksessa times = 3, joten ehto on tosi;
  2. Viestin tulostus: funktio tulostaa "Hello, Recursion!";
  3. Rekursiivinen kutsu: funktio kutsuu itseään arvolla times - 1;
  4. Toisto: tämä prosessi jatkuu, kunnes times on 0;
  5. Päättyminen: kun ehto times > 0 ei enää täyty, rekursio päättyy ja ohjelma suorittuu 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.

Tehtävä

Swipe to start coding

Annettuna merkkijono, joka edustaa puhelinnumeroa ja saattaa sisältää välilyöntejä, viivoja, sulkuja tai muita ei-numeerisia merkkejä. Tavoitteena on poimia vain numerot rekursion avulla.

  1. Jos syötemerkkijono number on tyhjä, palautetaan tyhjä merkkijono.
  2. Tarkista, onko merkkijonon number ensimmäinen merkki numero käyttämällä isdigit()-metodia if-ehdossa.
  3. Jos se on numero, yhdistä se rekursiivisen kutsun tulokseen funktiolle format_phone_number, välittäen alimerkkijono alkaen toisesta merkistä.
  4. Jos se ei ole numero, tee rekursiivinen kutsu funktiolle format_phone_number, ohittaen ensimmäinen merkki.

Ratkaisu

Switch to desktopVaihda työpöytään todellista harjoitusta vartenJatka siitä, missä olet käyttämällä jotakin alla olevista vaihtoehdoista
Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 5. Luku 1
single

single

some-alt