single
Rekurssio
Pyyhkäise näyttääksesi valikon
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
123456def 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:
times = 3→ ehto on tosi, viesti tulostetaan, kutsutaanprint_message(message, 2);times = 2→ ehto on tosi, viesti tulostetaan, kutsutaanprint_message(message, 1);times = 1→ ehto on tosi, viesti tulostetaan, kutsutaanprint_message(message, 0);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ä.
Jokaisella rekursiivisella funktiolla täytyy olla pohjatapaus. Ilman sitä funktio kutsuu itseään loputtomasti ja aiheuttaa RecursionError-virheen.
Pyyhkäise aloittaaksesi koodauksen
Toteuta rekursiivinen funktio list_sum, joka laskee listan kaikkien alkioiden summan.
- Jos lista
numberson tyhjä, palauta0— tämä on perustapaus; - Muussa tapauksessa palauta ensimmäinen alkio lisättynä rekursiivisen kutsun tulokseen, jossa käytetään listan loppuosaa.
Ratkaisu
Kiitos palautteestasi!
single
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme