wskaż błąd w tym zapisie program c++ int liczba=5; int rekurencja (int &liczba) { if (liczba==0) return 1; else return rekurencja(liczba-1)*liczba; }

wskaż błąd w tym zapisie program c++ int liczba=5; int rekurencja (int &liczba) { if (liczba==0) return 1; else return rekurencja(liczba-1)*liczba; }
Odpowiedź

Główny błąd to przekazywanie argumentu przez referencję do tej funkcji, następnie wywoływanie jej w ten sposób: rekurencja(liczba - 1). Wynik działania (liczba - 1) jest stały (const). Liczby w C++ nie są zmiennymi, tylko stałymi. Nie możemy przekazać stałej do funkcji przez referencję, której argument nie jest zadeklarowany jako const reference. Aby rozwiązać ten problem należy usunąć znak & w deklaracji argumentu funkcji rekurencja, lub zadeklarować ten argument jako const int &liczba. Można się jeszcze przyczepić do deklaracji pierwszej zmiennej w programie: int liczba=5; Nie wchodzi ona w zakres ważności zmiennych w funkcji rekurencja. Jest ona nadpisywana przez argument tej funkcji o tej samej nazwie (liczba).

Dodaj swoją odpowiedź