Mam taki mały problem (pewnie mega banalny). Miałem za zadanie (z książki) aby napisać funkcję rekurencyjną w C++ która oblicza silnię.
Znalazłem już funkcję z necie, wygląda ona tak :
double silnia (int n)
{
if (n<2)
return 1;
return n*silnia2(n-1);
}
No okej. Wcześniej jednak próbowałem napisać coś samemu. Metodą prób i błędów wyszedł taki twór :
int main()
{
int b=1;
cout << endl <<silnia(7, &b); //dodałem tutaj endl z przodu, aby cout z funkcji się nie zlewaly
}
double long silnia (int n, int* b)
{
if (n>0)
{
cout << *b;
*b *= n;
silnia (n-1, b);
}
if (n==0)
return *b;
}
No i tak. Funkcja ta jak ją pisałem zawsze zwracała mi zero. Dodałem więc tam "cout << *b" aby zobaczyć dokładnie przebieg wartości *b. I co dziwne - wtedy funkcja ożyła i rzeczywiście, na cout << silnia (7; &b) zwraca prawidłowy wynik (pomijając wyświetlanie wcześniejszych cout'ów z funkcji silnia.
Pytanie jest następujące. Dlaczego gdy usunę ten *cout << b; z funkcji silnia funkcja ta zwraca 0, a gdy jednak to zostawię to zwraca prawidłowy wynik?
Tutaj obrazek pokazujący o co mi chodzi :