|
|||||||
|
|
|
![]() |
|
|
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: 16212
|
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: 16212
|
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: 11:27.



















