Condivisione della tecnologia

Algoritmo ricorsivo [Calcolo fattoriale]

2024-07-12

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

algoritmo ricorsivoè una tecnica di programmazione ampiamente utilizzata in informatica e matematica che consente funzionidirettoOindirettoterrachiamare se stesso per risolvere il problema.ricorsivoIdea baseÈ la scomposizione di problemi complessi in sottoproblemi più piccoli e simili finché questi sottoproblemi non diventano abbastanza semplici da poter essere risolti direttamente.

Gli algoritmi ricorsivi solitamente contengono due parti principali:

  • Caso base: questa è la condizione di terminazione per le chiamate ricorsive, ovvero l'istanza del problema più semplice a cui è possibile rispondere direttamente senza ulteriori chiamate ricorsive.
  • Caso ricorsivo: questo è il processo di suddivisione di un problema in sottoproblemi più piccoli e di risoluzione di questi sottoproblemi tramite chiamate ricorsive. Il caso ricorsivo deve garantire che ogni chiamata proceda verso il caso base.

Passaggi dell'algoritmo ricorsivo:

  • Identificare i casi base: determinare quali problemi possono essere risolti direttamente senza ulteriori chiamate ricorsive.
  • Progettare situazioni di ricorsione: definire come suddividere un problema di grandi dimensioni in sottoproblemi più piccoli e come combinare le soluzioni ai sottoproblemi per ottenere una soluzione al problema originale.
  • Garantire la convergenza ricorsiva: garantire che le chiamate ricorsive raggiungano infine il caso base ed evitino la ricorsione infinita.

Vantaggi e svantaggi degli algoritmi ricorsivi:

vantaggio: Il codice è conciso, la logica è chiara ed è facile da capire e scrivere.
discordanza : Potrebbe essere meno efficiente della soluzione iterativa perché comporta un maggiore sovraccarico delle chiamate di funzione. Inoltre, una ricorsione troppo profonda può causare errori di overflow dello stack.

La ricorsione ha applicazioni in molti algoritmi, come ad esempioattraversamento degli alberiRicerca graficaProgrammazione dinamica, ecc. . L'uso corretto della ricorsione può semplificare la risoluzione di problemi complessi.

Esempio: calcolare il fattoriale

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

Inserisci qui la descrizione dell'immagine

Spiegazione del codice

factorial La funzione riceve un parametro n , rappresenta il numero per cui calcolare il fattoriale.Il fattoriale è espresso comen!, definito come tutto inferiore o uguale a n Il prodotto di numeri interi positivi. Per esempio,5! = 5 × 4 × 3 × 2 × 1 = 120

All'interno della funzione:

  • Caso base: se n Se uguale a 1, la funzione restituisce direttamente 1. Questa è la condizione di terminazione della ricorsione perché il fattoriale di 1 è definito come 1.
  • Caso ricorsivo: se n non è uguale a 1, la funzione lo faràn Efactorial(n-1) I risultati si moltiplicano.factorial(n-1) è verofactorial funzioneLa chiamata stessa , ma il parametro viene ridotto di 1.Questa chiamata continuerà fino aln raggiunge 1.

La chiave della ricorsione è che ogni chiamata ricorsiva si avvicina al caso base, raggiungendolo infine e iniziando a restituire valori. In questo esempio, ogni chiamata ricorsiva diminuisce n di 1 finché n diventa 1.

Avviso:

La ricorsione potrebbe riscontrare problemi di prestazioni o errori di overflow dello stack durante la gestione di valori di grandi dimensioni perché ciascuna chiamata di funzione occupa una parte dello spazio dello stack. Per semplici operazioni matematiche come i fattoriali, esistono spesso metodi iterativi più efficienti e facili da usare in termini di memoria. Tuttavia, la ricorsione fornisce un modo elegante e di facile comprensione per risolvere determinati problemi.