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:
- 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 kautta. Rekursio tarjoaa selkeän ja elegantin tavan ratkaista nämä, kun funktio kutsuu itseään käsittelemään yksinkertaisempia tapauksia. Sitä 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, tulostetaan viesti, kutsutaanprint_message(message, 2);times = 2→ ehto on tosi, tulostetaan viesti, kutsutaanprint_message(message, 1);times = 1→ ehto on tosi, tulostetaan viesti, 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 perusehto; - Muussa tapauksessa erottele ensimmäinen alkio muista. Palauta ensimmäinen alkio (
numbers[0]) lisättynä kutsumallalist_sum()uudelleen listan lopuilla alkioilla (numbers[1:]).
Ratkaisu
Kiitos palautteestasi!
single
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme