Nie rozumiem co robi return 1
x^0 jest zawsze rowne 1. Jeśli o tym wiesz, to nie wiem czego nie rozumiesz.
Weź jakiś przykład i przeanalizuj krok po kroku co robi funkcja.
Np. wywołanie potega(2, 3) sprowadza się do:
potega(2, 3) == 2 * potega(2, 2)
potega(2, 2) == 2 * potega(2, 1)
potega(2, 1) == 2 * potega(2, 0)
potega(2, 0) == 1
I teraz wracamy (brak kolejnych wywołań):
skoro potega(2, 0) == 1, to:
potega(2, 1) == 2 * 1 == 2
potega(2, 2) == 2 * 2 == 4
potega(2, 3) == 2 * 4 == 8
PS: kod wklejamy w pole do kodu (ikonka z napisem code powyżej pola tekstowego).
W drugiej funkcji zupełnie bezsensowna jest ta zmienna s. Kod powienien wyglądać tak:
int potega (int a, int b)
{
if (b==0) {return 1;}
return a*potega(a, b-1);
}
Natomiast pierwsza funkcja w ogóle jest bez sensu. Mimo deklaracji zwracania inta, jakikolwiek return wykona się tylko jeśli b == 0. To nawet nie jest poprawnie napisana funkcja już nie mówiąc o spełnianiu jakiejkolwiek funkcjonalności. Poza tym nie rozumiem dlaczego a^0 miałoby kiedykolwiek dawać co innego niż 1 (funkcja zwraca wtedy s).