Dziwne wartości zmiennej w funkcji

0

Witam
Mam pewien problem z programem:

#include<iostream>
using namespace std;
int f1(int s);
int n=0;
int main()
{
    int s;
            cin >> s;
            cout << f1(s) << '\n';system("pause");
}
int f1(int s)
{
    //int zm;
    if(s<=1)
    {
            return n;
            //cout n << zm;
    } else
    {
          if(s%2==0)
          {
                    s-=1;
                    n++;
                    f1(s);
          } else
          {
                    s-=3;
                    n++;
                    f1(s);
          }
    }
}

Wynikiem programu dla wejścia 10 powinna być liczba 5. Tymczasem program wywala jakąs dziwną liczbę. W trakcie wykonywania funkcji f1 zmienna z zmienia się prawdiłowo (tzn. jest inkrementowana) dopiera gdy s <=1 to wywala dziwną liczbę. Tak samo jest gdy zamiast return n dam cout << n. Jednak gdy w funkcji dodam jakąs inną zmienną (np. zm) i wypisze zmienną n, a później zm (cout n << zm) to n ma prawidłową wartość a zm dziwną liczbę.
Co tu jest nie tak, bo siedze na tym już jakiś czas i nie mogę znaleźć błędu.
Pozdrawiam

0

przecież kompilator na 100% narzeka, że brakuje ci return w dwóch miejscach!
Pisz zawsze kod tak, by nie było ostrzeżeń (Warning) to wtedy unikniesz takich prostych błędów.

0

Niestety w Dev-C++ nie mam żadnych ostrzeżeń :)
Gdzie jeszcze powinny być returny i dlaczego jest taki błąd. Jeżeli zmienna byłaby zadeklarowana w funkcji to mogłby być w niej "śmieci", ale jest globalna i dodatkowo z przypisaną wartością początkową.
Jeżeli dam funkcje typu void i cout << n to jest ok.

0

Wyrzuć IDE i książkę / podręcznik, z którego korzystasz.

0

Chodzi o returny przed rekurencyjnymi wywołaniami funkcji?
A tak z ciekawości spytam - czy jeśli zmiena jest globalna to nie powinno to działać (jak kompilowałem na ideone.com to było ok)
A dleczego Dev-C++ jest taki zły? :)

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