View Full Version : Quesito C++ semplice
supermario
10-01-2005, 18:22
Salve
ho questo codice
using std::cout;
using std::cin;
using std::endl;
unsigned long fibonacci( unsigned long );
int main()
{
unsigned long result, number;
unsigned long i;
cout << "Enter an integer: ";
cin >> number;
result = fibonacci( i );
for (i = 0 , i++ , i==number )
{
cout << "Fibonacci(" << i << ") = " << result << endl;
}
return 0;
}
// Recursive definition of function fibonacci
unsigned long fibonacci( unsigned long n )
{
if ( n == 0 || n == 1 ) // base case
return n;
else // recursive case
return fibonacci( n - 1 ) + fibonacci( n - 2 );
}
dove sbaglio??commetto un errore logico?
per chi nn l'avesse capito voglio che il programma mi scriva la successione di fibonacci fino al numero che imposto io
grazie :)
Ziosilvio
10-01-2005, 18:32
Di errori ne commetti almeno tre.
Primo: la sintassi che usi per il for, non è quella del C++.
Prendi il libro e studia quella corretta.
Secondo: chiami fibonacci una volta sola, all'esterno del ciclo for anziché all'interno, e per di più su una variabile non inizializzata.
Fa' più attenzione quando scrivi il tuo codice.
Terzo: implementi fibonacci ricorsivamente, quando esiste un algoritmo iterativo immediatamente applicabile.
Le implementazioni ricorsive sono dispendiose dal punto di vista dell'occupazione della memoria: se puoi usare un'implementazione iterativa, fàllo.
beppegrillo
10-01-2005, 18:52
Originariamente inviato da Ziosilvio
Terzo: implementi fibonacci ricorsivamente, quando esiste un algoritmo iterativo immediatamente applicabile.
Le implementazioni ricorsive sono dispendiose dal punto di vista dell'occupazione della memoria: se puoi usare un'implementazione iterativa, fàllo.
L'esempio dell'individuazione del numero di fibonacci è il classico che i prof fanno per far capire la ricorsione ai propri studenti, quindi penso sia quello il motivo principale dello sviluppo di tale programma :)
E' vero che la ricorsione è generalmente più dispendiosa dell'approccio iterativo, ma in molti casi è più immediata e la perdita di memoria non è tale da preferire l'iterazione.
chetidolanimale
10-01-2005, 19:24
nel momento in cui chiama fibonacci(i) la variabile i non è ancora inizializzata o sbaglio?
[edit]ops,già detto:mc:
chetidolanimale
10-01-2005, 19:41
prova con questo:
#include<iostream>
using namespace std;
unsigned long fibonacci( unsigned long );
int main()
{
unsigned long number;
cout << "Enter an integer: ";
cin >> number;
for (unsigned long i = 0 ; i <= number ; i++)
{
cout << "Fibonacci(" << i << ") = " << fibonacci(i) << endl;
}
return 0;
}
// Recursive definition of function fibonacci
unsigned long fibonacci( unsigned long n )
{
if ( n == 0 || n == 1 ) // base case
return n;
else // recursive case
return fibonacci( n - 1 ) + fibonacci( n - 2 );
}
"dovrebbe" andare meglio,però consuma davvero un sacco di risorse, avevo provato a inserire 1000 ,ma arrivato a fibonacci(40) ho chiuso il programma per la disperazione... :mc: :D
chetidolanimale
10-01-2005, 19:43
2 domandine
1) qual'è la necessità di dichiarare "number" come unsigned long?
2) se nel ciclo for dichiaro i come int, cosa cambia in pratica?
supermario
10-01-2005, 19:49
come mi comporto con l'iteratività?
grazie x l'aiuto:)
chetidolanimale
10-01-2005, 20:14
forse questa può andare:
#include<iostream>
using namespace std;
int main()
{
unsigned long number;
cout << "Enter an integer: ";
cin >> number;
unsigned long a=0, b=1;
cout << "Fibonacci(0) = " << a << endl;
if(number>0) cout << "Fibonacci(1) = " << b << endl;
unsigned long swap;
for (unsigned long i = 2 ; i <= number ; i++)
{
swap=a;
a=b;
b+=swap;
cout << "Fibonacci(" << i << ") = " << b << endl;
}
return 0;
}
a me funziona,però sono abbastanza niubbo in c++, quindi magari senti pure cosa dice qualcun'altro con + esperienza
supermario
10-01-2005, 20:28
che palle nn posso eseguire il .exe che subito winxp me lo chiude:muro:
chetidolanimale
10-01-2005, 20:31
è normale...
prova ad aprire il prompt dei comandi e ad eseguire il programma da lì ;)
supermario
10-01-2005, 20:44
sisi col pront so farlo ma mi rompe farlo sempre:muro: :muro:
su win me va senza problemi invece....no??;)
chetidolanimale
10-01-2005, 20:58
ho letto giusto ieri sul forum che una delle soluzioni per ovviare al problema è includere il file <stdlib.h> e aggiungere giusto prima del return 0 finale questa riga: system("PAUSE");
chetidolanimale
10-01-2005, 21:19
forse in c++ sarebbe più corretto fare una
#include<cstdlib>
using namespace std;
senza l'h finale nel nome della libreria
supermario
10-01-2005, 21:24
good:)
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.