Zła zwracana wartość - pomocy

0

napisałem prosty program z rekurencją który ma wyszukać element z tablicy, lecz mam problem ze zwracaną wartością i nie wiem w czym tkwi błąd ;/ także proszę o pomoc. Poniżej umieszczam napisany program wraz z komentarzami o co mi chodzi

#include <iostream>
using namespace std;

int znajdz(int szuk, int *tab, int rozm)
{
    if(rozm == -1) return rozm;  //zwraca "błędną" wartość - nie taką jak pokazuje wewnątrz funkcji
    if(szuk == tab[rozm]) return rozm; // to co wyżej
    else
    {
        rozm--;
        znajdz(szuk,tab,rozm);
    }
}
int main()
{
    int tab[15] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
    int rozm = 14;
    
    cout << "Jakiej liczby szukasz? = ";
    int szuk;
    cin >> szuk;
    int s;
    s = znajdz(szuk, tab, rozm);
    
    if(s == -1) cout << "Nie istnieje taki element w tablicy\n";
    else cout << "Element znajduje sie w tab[" << s << "]" << endl;
        
    cout << "Koniec programu\n";
    system("pause");
} 

wiem ze można napisać ten program w inny sposób, ale nie o to mi tutaj chodzi. Chce się dowiedzieć dlaczego funkcja znajdź zwraca mi "błędną" wartość. W moim logicznym myśleniu powinno to działać ok, ale niestety gdzieś się wysypuje. Może tu chodzi o to że funkcja jest rekurencyjna i następują powroty ale nie wiem skąd by się brała inna wartość. Proszę o wytłumaczenie

0

Zobacz:

1 wersja - zla

#include <iostream>
using namespace std;

int znajdz(int szuk, int *tab, int rozm)
{
    if(rozm == -1) return rozm;  //zwraca "błędną" wartość - nie taką jak pokazuje wewnątrz funkcji

    if(szuk == tab[rozm]) return rozm; // to co wyżej
    else
    {
        rozm--;
        znajdz(szuk,tab,rozm);
    }
}

2 wersja - zla

#include <iostream>
using namespace std;

int znajdz(int szuk, int *tab, int rozm)
{
    if(rozm == -1) return rozm;  //zwraca "błędną" wartość - nie taką jak pokazuje wewnątrz funkcji

    if(szuk == tab[rozm]) return rozm; // to co wyżej
    else
    {
        rozm--;
        znajdz(szuk,tab,rozm);
    }
    return 0xDEAD;
}

3 wersja - dobra

#include <iostream>
using namespace std;

int znajdz(int szuk, int *tab, int rozm)
{
    if(rozm == -1) return rozm;  //zwraca "błędną" wartość - nie taką jak pokazuje wewnątrz funkcji

    if(szuk == tab[rozm]) return rozm; // to co wyżej
    else
    {
        rozm--;
        return znajdz(szuk,tab,rozm);
    }
}

Chodzi o to, ze po kazdym wywolaniu znajdz w funkcji znajdz sterowanie zostanie w koncu skierowane za wywolanie znajdz, a tam nic nie zwracasz, wiec dostajesz losowa wartosc.

0

dzięki za pomoc ;) przejrzałem na oczy

1 użytkowników online, w tym zalogowanych: 0, gości: 1