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
Osio 5. Luku 1
single

single

Rekurssio

Pyyhkäise näyttääksesi valikon

Note
Määritelmä

Rekursiivinen funktio on funktio, joka kutsuu itseään ratkaistakseen ongelman jakamalla sen pienempiin, yksinkertaisempiin osiin.

Rekursiivisen ratkaisun keskeiset osat ovat:

  • Perustapaus: ehto, joka pysäyttää rekursion;
  • Rekursiotapaus: kohta, 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. Rekursiota käytetään yleisesti esimerkiksi puiden käsittelyssä, polkujen tutkimisessa tai rakenteiden (esim. listat, merkkijonot) pilkkomisessa.

Yksinkertainen esimerkki

123456
def print_message(message, times): if times > 0: # Base case: stop when times is 0 print(message) print_message(message, times - 1) # Recursive case print_message("Hello, Recursion!", 3)

Käy vaihe vaiheelta läpi, miten tämä toimii:

  1. times = 3 → ehto on tosi, viesti tulostetaan, kutsutaan print_message(message, 2);
  2. times = 2 → ehto on tosi, viesti tulostetaan, kutsutaan print_message(message, 1);
  3. times = 1 → ehto on tosi, viesti tulostetaan, kutsutaan print_message(message, 0);
  4. times = 0 → ehto on epätosi, rekursio päättyy.

Tulos: viesti tulostetaan kolme kertaa.

Kutsupino

Joka kerta kun funktio kutsuu itseään, se lisää uuden kehyksen kutsupinoon — muistirakenteeseen, joka seuraa aktiivisia funktiokutsuja. Kun pohjatapaus saavutetaan, jokainen aiempi kutsu suoritetaan loppuun yksi kerrallaan käänteisessä järjestyksessä.

Note
Huomio

Jokaisella rekursiivisella funktiolla täytyy olla pohjatapaus. Ilman sitä funktio kutsuu itseään loputtomasti ja aiheuttaa RecursionError-virheen.

Tehtävä

Pyyhkäise aloittaaksesi koodauksen

Toteuta rekursiivinen funktio list_sum, joka laskee listan kaikkien alkioiden summan.

  1. Jos lista numbers on tyhjä, palauta 0 — tämä on perustapaus;
  2. Muussa tapauksessa palauta ensimmäinen alkio lisättynä rekursiivisen kutsun tulokseen, jossa käytetään listan loppuosaa.

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

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

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

some-alt