Teknologian jakaminen

Rekursiivinen algoritmi [laskevat tekijät]

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

rekursiivinen algoritmion tietojenkäsittelytieteessä ja matematiikassa laajalti käytetty ohjelmointitekniikka, joka sallii funktioitasuoraantaiepäsuoramaasoittaa itseään ongelman ratkaisemiseksi.rekursiivinenPerusideaSe on monimutkaisten ongelmien hajottamista pienempiin, samankaltaisiin osaongelmiin, kunnes nämä osaongelmat ovat riittävän yksinkertaisia ​​ratkaistaviksi suoraan.

Rekursiiviset algoritmit sisältävät yleensä kaksi pääosaa:

  • Perustapaus: Tämä on rekursiivisten puheluiden lopetusehto, eli yksinkertaisin ongelman ilmentymä, johon voidaan vastata suoraan ilman uusia rekursiivisia puheluita.
  • Rekursiivinen tapaus: Tämä on prosessi, jossa ongelma jaetaan pienempiin osaongelmiin ja ratkaistaan ​​nämä osa-ongelmat rekursiivisten kutsujen avulla. Rekursiivisen tapauksen tulee varmistaa, että jokainen puhelu etenee kohti perustapausta.

Rekursiivisen algoritmin vaiheet:

  • Tunnista perustapaukset: Selvitä, mitkä ongelmat voidaan ratkaista suoraan ilman rekursiivisia kutsuja.
  • Suunnittele rekursiotilanteet: Määritä, kuinka suuri ongelma jaetaan pienempiin osaongelmiin ja kuinka yhdistetään osaongelmien ratkaisut, jotta saadaan ratkaisu alkuperäiseen ongelmaan.
  • Takaa rekursiivinen konvergenssi: Varmista, että rekursiiviset puhelut saavuttavat lopulta perustapauksen ja vältä loputon rekursio.

Rekursiivisten algoritmien edut ja haitat:

etu: Koodi on ytimekäs, logiikka selkeä, ja se on helppo ymmärtää ja kirjoittaa.
puute : Voi olla vähemmän tehokas kuin iteratiivinen ratkaisu, koska siihen liittyy enemmän funktiokutsuja. Lisäksi liian syvä rekursio voi aiheuttaa pinon ylivuotovirheitä.

Rekursiolla on sovelluksia monissa algoritmeissa, kutenpuun läpikulkuGraafihakuDynaaminen ohjelmointi jne. . Rekursion oikea käyttö voi yksinkertaistaa monimutkaisten ongelmien ratkaisemista.

Esimerkki: Laske tekijä

def factorial(n):#自定义求n的阶乘函数
        if n==1:#判断n=1
                return 1#返回1结束
        else:#递归条件 即n!=1
                return n*factorial(n-1)#递归求阶乘

number = int(input("请输入一个正整数:"))#输入n的值
result = factorial(number)#调用阶乘函数
print("%d 的阶乘是 %d" %(number,result))#输出结果
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

Lisää kuvan kuvaus tähän

Koodin selitys

factorial Funktio vastaanottaa parametrin n , edustaa lukua, jolle tekijä lasketaan.Faktoriaali ilmaistaan ​​muodossan!, joka määritellään kaikiksi, jotka ovat pienempiä tai yhtä suuria kuin n Positiivisten kokonaislukujen tulo. Esimerkiksi,5! = 5 × 4 × 3 × 2 × 1 = 120

Toiminnon sisällä:

  • Perustapaus: jos n Jos 1, funktio palauttaa arvon 1 suoraan. Tämä on rekursion lopetusehto, koska 1:n faktoriaali määritellään 1:ksi.
  • Rekursiivinen tapaus: jos n ei ole yhtä suuri kuin 1, funktio tuleen jafactorial(n-1) Tulokset kerrotaan.factorial(n-1) on tottafactorial toimintoItse puhelu , mutta parametria pienennetään yhdellä.Tämä puhelu jatkuu astin saavuttaa 1.

Avain rekursioon on, että jokainen rekursiivinen puhelu siirtyy lähemmäksi perustapausta, saavuttaen lopulta perustapauksen ja alkaa palauttaa arvoja. Tässä esimerkissä jokainen rekursiivinen puhelu pienentää n:ää yhdellä, kunnes n:stä tulee 1.

Ilmoitus:

Rekursio voi kohdata suorituskykyongelmia tai pinon ylivuotovirheitä käsiteltäessä suuria arvoja, koska jokainen funktiokutsu vie osan pinotilasta. Yksinkertaisille matemaattisille operaatioille, kuten kertoimille, on usein tehokkaampia ja muistiystävällisempiä iteratiivisia menetelmiä. Rekursio tarjoaa kuitenkin tyylikkään ja helposti ymmärrettävän tavan ratkaista tiettyjä ongelmia.