|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Jan 2001
Città: Villanova di Guidonia (RM)
Messaggi: 1079
|
[C] aiuto
Ciao!
![]() Oggi mi hanno spiegato alcune cose sulla ricorsività e come esempio è stato fatto quello della successione di Fibonacci. Praticamente per avere un numero minore di chiamate alla funzione rispetto all'implementazione classica, abbiamo implementato un algoritmo che memorizzasse in un array i valori già calcolati. Questo è l'algoritmo: Codice:
#include <stdio.h> #include <stdlib.h> int fib(int); int valori[100]={0}; int main(void){ int n=5,ris; ris=fib(n); printf("%d", ris); return 0; } int fib(int n){ if(valori[n]>0) return valori[n]; if(n==0) valori[n]=0; if(n==1) valori[n]=1; else valori[n]=fib(n-1)+fib(n-2); return valori[n]; } |
![]() |
![]() |
![]() |
#2 |
Moderatore
Iscritto dal: Nov 2003
Messaggi: 16211
|
Il programma funziona a condizione che tutte le componenti del vettore valori siano inizializzate a zero prima della prima chiamata a fib.
Ora, l'istruzione: Codice:
int valori[100]={0}; Per inizializzare a zero tutte le componenti del vettore valori, devi o usare un ciclo for, o scrivere "parentesi graffa aperta, zero, virgola, zero, virgola, ..., zero, virgola, zero, parentesi graffa chiusa, punto e virgola" a destra dell'uguale, dove gli zeri sono tanti quante le componenti del vettore.
__________________
Ubuntu è un'antica parola africana che significa "non so configurare Debian" ![]() Scienza e tecnica: Matematica - Fisica - Chimica - Informatica - Software scientifico - Consulti medici REGOLAMENTO DarthMaul = Asus FX505 Ryzen 7 3700U 8GB GeForce GTX 1650 Win10 + Ubuntu |
![]() |
![]() |
![]() |
#3 | |
Member
Iscritto dal: Apr 2004
Messaggi: 130
|
Quote:
@Manugal Nel programma c'e' un evidente errore logico: Codice:
if(n==0) valori[n]=0; else if(n==1) valori[n]=1; else valori[n]=fib(n-1)+fib(n-2); |
|
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Jan 2001
Città: Villanova di Guidonia (RM)
Messaggi: 1079
|
Ah grazie Qu@ker proverò a vedere se hai ragione
![]() Però volevo sapere, dato che fib chiama se stessa più di una volta, l'indice dell'array come si comporta. Quello non riesco a capirlo. |
![]() |
![]() |
![]() |
#5 | |
Moderatore
Iscritto dal: Nov 2003
Messaggi: 16211
|
Quote:
Kernighan&Ritchie, edizione italiana Jackson Libri, pagina 288. Chiedo perdono.
__________________
Ubuntu è un'antica parola africana che significa "non so configurare Debian" ![]() Scienza e tecnica: Matematica - Fisica - Chimica - Informatica - Software scientifico - Consulti medici REGOLAMENTO DarthMaul = Asus FX505 Ryzen 7 3700U 8GB GeForce GTX 1650 Win10 + Ubuntu |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 21:24.