Ad esempio, prendi il caso del numero di Fibonacci per calcolare l'ennesimo numero richiesto n-1
e n-2
term.
Se lo faccio con l'approccio bottom-up, è la ricorsione come f(n)
dipende da f(n-1)
?
Ad esempio, prendi il caso del numero di Fibonacci per calcolare l'ennesimo numero richiesto n-1
e n-2
term.
Se lo faccio con l'approccio bottom-up, è la ricorsione come f(n)
dipende da f(n-1)
?
Ci sono diversi significati leggermente diversi rispetto al termine "ricorsivo":
L'approccio bottom-up è (senza inutilmente sprecare spazio per n valori quando gli ultimi due sono tutto ciò che è richiesto):
def fib(n):
f_2, f_1 = 0, 1
for _ in xrange(1, n):
f_2, f_1 = f_1, f_2 + f_1
return f_1
e questo è non ricorsivo .
Tuttavia, qualsiasi loop può essere riscritto come ricorsivo, che dovrebbe apparire come:
def fib(n):
def f(n, f_2, f_1):
if n == 1:
return f_1
else:
return f(n, f_1, f_2 + f_1)
return f(n, 0, 1)
Ormai è piuttosto complicato, ma in linguaggi funzionali (come Haskell) e in gran parte funzionali (come Lisp / Scheme) probabilmente sarebbe la definizione più naturale. E in quelle lingue con ottimizzazione della ricorsione in coda (come Haskell o Scheme) è altrettanto efficiente.
Lo considererei "ricorsione" se chiami una funzione stessa.
Qualcosa del genere:
f(n) {
....
return f(n-2) + f(n-1);
}
Fai la stessa cosa con un ciclo e non sarebbe una ricorsione
f(n) {
.....
for ( i =2 ; i< n ;i++)
arr[i] = arr[i-1] + arr[i-2]
}
Leggi altre domande sui tag recursion dynamic-programming