[ KoKuZ @ 16.04.2007. 14:48 ] @
Napisati program koji ce na osnovu unesenog broja, koristeci koristeci rekurzivnu funkciju, izracunati sumu parnih brojeva izmedju unesenog i broja 100. Napomena: korisnik moze unijeti broj koji je veci ili manji od broja 100.

[ mizob @ 16.04.2007. 16:40 ] @
Code:

int zbir = 0;
int f(int i){
if (i < 100) zbir = zbir + f(i+1);
else return zbir
}


To bi trebalo da je ta funkcija.
[ Mali Misha @ 16.04.2007. 16:54 ] @
To nije funkcija..
Može biti njeno telo ili njegov deo.

KoKuZ, zašto ne napraviš ikakav pokušaj?
[ belegija @ 16.04.2007. 17:03 ] @
To definitivno nije fja. Trebala bi biti rastavljena na 2 dijela: za brojeve vece od 100 i brojeve manje od 100. I ovdje sabira sve brojeve a ne samo parne.
[ mizob @ 16.04.2007. 21:03 ] @
Nisam video da trebaju parni brojevi da se saberu
Ovo je onda ta rekurzivna funkcija.

Code:

int f(int i){

if ((i < 100) & (i % 2 == 0))return (i + f(i+2));
if ((i < 100) & ( i % 2 == 1)) {
    i++;
    return f(i);
}
if (i > 100) return i;
}


[ SuPeR_MaSteR @ 16.04.2007. 21:14 ] @
Evo f-je:
Code:

int sum = 0;
int f(int num)
{
   if (num == 100)
       return sum;
    if (num % 2 == 0)
        sum += num;
    if (num < 100)
        f(++num);
    else
        f(--num);
}
[ Mali Misha @ 16.04.2007. 22:30 ] @
KoKuZ nisi rekao da li u sumu ulaze dat broj i 100.

@ Milos Zobenica:
Pa nije baš. Probaj recimo sa nekim brojem većim od 100.

@ SuPeR_MaSteR
Ja bih tvoju f-ju zapisao ovako: (Ne zbog ternarnih operatora, nego zbog lepše postavljenog return i nepostojanja globalne promenljive)
Code:
int f1(int num)
{    
    if(num==100) return 0;
    
    return
        ( num&1 ? 0 : num )
        + ( (num<100) ? f1(num+1) : f1(num-1) );
}
[ mizob @ 16.04.2007. 22:36 ] @
U pravu si za broj veci od 100, resenje je da se umesto
Code:
if (i > 100) return i;


stavi

Code:
if (i > 100) return 0;
[ KoKuZ @ 17.04.2007. 20:54 ] @
cccc ja sam sebi ev govorim kako sam glup jer sam pokusavo nesto drugo...mislim da bi sada uradio ovako kao kolega Mali Misha
Code:

int f1(int num)
{    
    if(num==100) return 0;
    
    return
        ( num&1 ? 0 : num )
        + ( (num<100) ? f1(num+1) : f1(num-1) );
}


posto sam skontao u cemu je point :D

hvala :D
[ Mali Misha @ 18.04.2007. 19:03 ] @
@ Milos Zobenica
Sumljam da će to popraviti stvar. Funkcija treba da radi i za brojeve veće od sto, znači nešto kao ovo:

f(80) = 80 + 82 + 84 + 86 + ... + 98 = 890
f(120) = 120 + 118 + 116 + 114 + ... + 102 = 1110

Probaj da ispisuješ rezultate funkcija zajedno i upoređuj rezultate dok ne budeš zadovoljan:
Code:
  cout << f(2000) << '\n' << f1(2000);
[ mizob @ 18.04.2007. 19:42 ] @
Izgleda da ja vise nisam procitao iz prvog topica nego sto sam procitao, evo ispravio sam resenje, tacnije samo dodao za brojeve > 100, isprobao, radi.

Code:


int f(int i){

if ((i < 100) & (i % 2 == 0))return (i + f(i+2));
if ((i < 100) & ( i % 2 == 1)) {
    i++;
    return f(i);
}


if ((i > 100) & (i % 2 == 0))return (i + f(i-2));
if ((i > 100) & ( i % 2 == 1)) {
    i--;
    return f(i);
}

if ((i = 100) | ( i = 99) | ( i = 101)) return 0;
}
[ Trantor @ 02.05.2007. 22:31 ] @
Pozdrav svima.

Imam i ja jedan problem koji nije direktno u vezi sa rekurzivnom funkcijom, mada se u ovom programu ona pojavljuje.
Naime treba da napišem program koji diže broj na stepen ako se i broj i stepen zadaju sa tastature. Traži se da se to
odradi rekurzivnom funkcijom što sam ja i odradio ali mi kompajler non stop javlja grešku. Fora je u tome da sam već
imao slučan problem i program je odjednom proradio bez ikakvog objasnjenja. Da li je moguće da je upitanju kompajler
Dev C++ v 4.9.9.2? Inače evo koda pa ako neko ima malo vremena bilo bi lepo ako može da mi pomogne. Hvala unapred.

// Program koji trazi broj i stepen i koristi rekurzivnu
// funkciju "Stepenovanje" za dizanje broja na stepen.

#include <iostream>

using namespace std;

unsigned long Stepenavanje(unsigned short broj, unsigned short stepen);

int main()
{
unsigned short x, y;
unsigned long rezultat;
cout << "Unesite broj koji zelite da stepenujete: " << endl;
cin >> x;
cout << "Unesite broj kojim zelite da stepenujete: " << endl;
cin >> y;
rezultat = Stepenovanje(short unsigned x, short unsigned y);
cout << "Trazeni broj je: " << rezultat << endl;
system("PAUSE");
return 0;
}

unsigned long Stepenovanje(unsigned short x, unsigned short y)
{
if ( y == 0)
return 1;
if ( y == 1)
return x;
else
return (x * Stepenovanje(x, y - 1);
}


[Ovu poruku je menjao Trantor dana 03.05.2007. u 00:29 GMT+1]
[ pcaca @ 03.05.2007. 03:03 ] @
Evo ispravan kod:
Code:
#include <iostream>

using namespace std;

unsigned long Stepenovanje(unsigned short broj, unsigned short stepen);

int main()
{
    unsigned short x, y;
    unsigned long rezultat;
    cout << "Unesite broj koji zelite da stepenujete: " << endl;
    cin >> x;
    cout << "Unesite broj kojim zelite da stepenujete: " << endl;
    cin >> y;
    rezultat = Stepenovanje(x, y);
    cout << "Trazeni broj je: " << rezultat << endl;
    system("PAUSE");
    return 0;
}

unsigned long Stepenovanje(unsigned short x, unsigned short y)
{
    if ( y == 0)
        return 1;
    if ( y == 1)
        return x;
    else
        return (x * Stepenovanje(x, y - 1));
}

Imao si nekoliko gresaka:
1. Ime funkcije kod deklaracije bilo je napisano Stepenavanje.
2. Kada zoves funkciju ne trebaju tipovi. Ispravno je Stepenovanje(x, y); bez short unsigned.
3. Falila je jedna zagrada u zadnjem redu funkcije, kod return-a.
[ Trantor @ 03.05.2007. 10:40 ] @
Aleksandre hvala ti puno.

Znam ja da u pozivu funkcije nije potrebno stavljati tip promenljive koje se predaje funkciji po vrednosti.
ali sam bio očajan i nisam znao šta vise da probam. Sad mi je čak i smešno kako sam bio tako slep.
Hvala još jednom.