Poslao: 15 Maj 2008 15:45
|
offline
- Nemanja_Vr
- Novi MyCity građanin
- Pridružio: 15 Maj 2008
- Poruke: 5
|
jel moze neka pomoc za sledeci zadatak??
Sastaviti algoritam i napisati program pomocu kojeg se za dati broj n izracunava n-ti clan niza
Fn=3Fn-1 -2Fn-2 +Fn-1Fn-2 pri cemu je Fo=0 i F1=1
Napomena n je u ineksu!!!
ako moze neki odgovor na nemanjamic@yahoo.com
|
|
|
Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
|
|
Poslao: 15 Maj 2008 16:38
|
offline
- Riddler
- Elitni građanin
- Pridružio: 16 Jun 2005
- Poruke: 2392
- Gde živiš: Beograd
|
Moze npr ovako:
#include <iostream.h>
int f(int cf[10],int n){
while(cf[n]<0){
if(cf[n-1]>-1 && cf[n-2]>-1)
cf[n]=3*cf[n-1]-2*cf[n-2]+cf[n-1]*cf[n-2];
else {
cf[n-1]=f(cf,n-1);
cf[n-2]=f(cf,n-2);} }
return cf[n];
}
void main(){
int n,cf[10];
cf[0]=0;
cf[1]=1;
cin >> n;
for(int i=2;i<n;i++) cf[n]=-1;
f(cf,n);
cout << cf[n];}
|
|
|
|
Poslao: 15 Maj 2008 16:41
|
offline
- N1k0l4
- Prijatelj foruma
- Pridružio: 06 Sep 2005
- Poruke: 3800
- Gde živiš: Beograd
|
Tipična rekurzija.
S' obzirom da si nov na forumu, verovatno nisi video da ovde ljudi ne vole da rade drugima domaće, ali vole da pomažu.
Zato, evo pomoći:
Postoje dva rešenja, iterativno i rekurzivno.
Rekurzivno zahteva malo više steka, ali je možda čitljivije, a iterativno zauzima manje steka, a u ovom slučaju nije ništa manje razumljivo.
Dakle ovako: rekurzivno:
Pozivaš funkciju sa tim indexom
proferavaš da li je ==0, ako jeste vratiš 0, a ako nije, pitaš da li je == 1, ako jeste vratiš 1, u suprotnom vratiš poziv te funkcije sa parametrima 3*Fn-1-.... prepišeš je
Evo ti primer za fibonačijev niz recimo,
{
if (n == 0)
return 0;
else if (n == 1)
return 1;
else
return fib(n-1) + fib(n-2);
}
Iterativno, poenta ti je da čuvaš tri broja broja,
inicijalizuješ recimo f0=0, i f1=1, i uzmeš petlju koja će se kretati od 0 do n-2 i tu računaš Fn=3*fn-1....
f0=f1
f1=fn
i to bi trebalo da je to
Dopuna: 15 Maj 2008 16:41
pretece me riddler
|
|
|
|
Poslao: 15 Maj 2008 16:46
|
offline
- Riddler
- Elitni građanin
- Pridružio: 16 Jun 2005
- Poruke: 2392
- Gde živiš: Beograd
|
Sad videh da nisam stavio proveru za n==0 i n==1, radio sam pod pretpostavkom da niko nece traziti ono sto se zna, ali to ne znaci da ne treba i to staviti u program, zato Nemanja_Vr implementiraj to u program
|
|
|
|
|
|
|
Poslao: 18 Maj 2008 21:28
|
offline
- N1k0l4
- Prijatelj foruma
- Pridružio: 06 Sep 2005
- Poruke: 3800
- Gde živiš: Beograd
|
int f(int cf[10],int n){
while(cf[n]<0){
if(cf[n-1]>-1 && cf[n-2]>-1)
cf[n]=3*cf[n-1]-2*cf[n-2]+cf[n-1]*cf[n-2];
else {
cf[n-1]=f(cf,n-1);
cf[n-2]=f(cf,n-2);} }
return cf[n];
}
dal nije ovo beskonacna petlja u while
|
|
|
|
Poslao: 18 Maj 2008 21:32
|
offline
- Riddler
- Elitni građanin
- Pridružio: 16 Jun 2005
- Poruke: 2392
- Gde živiš: Beograd
|
Evo ukucao sam sad i radi... bez promene sam kopirao ono sto sam napisao ovde... Mozda je Nemanja_Vr testirao sa "velikim" brojem, ovo radi za n<=7 za vece treba da se preradi...
|
|
|
|
Poslao: 21 Maj 2008 22:20
|
offline
- Nemanja_Vr
- Novi MyCity građanin
- Pridružio: 15 Maj 2008
- Poruke: 5
|
Evo tacnog resenja zadatka!!!
/*funkcija
*/
#include <iostream>
#include <cmath>
using namespace std;
int main (){
double fn,f0,f1;
int n,i;
cin>>n;
f(0)=0;
f(1)=1;
f(i)=3*f*(i-1)-2*f*(i-2)+f*(n-1)*f(n-2);
for (i=2;i<n;i++){
f(i)=3*f*(i-1)-2*f*(i-2)+f*(n-1)*f(n-2);
cout<<f(n);
return 0;
}
}
Ipak hvala svima na pomoci!!!
|
|
|
|