Witam, mam problem z zadaniem. Zamień poniższą funkcje iteracyjna na rekurencyjną:
int fun (int a, int b) { int result = 1; for (int i = 0; i < b; i++) { result *= a; } return result }
Mógłby ktoś mi pomóc?
int fun(int a, int b) { if (!b) return 1; if (b==1) return a; return pow_x(a*a, b-1); }
int pow_x_y(int x, int y) { return y == 0 ? 1: x * pow_x_y(x, --y); }
Ogólnie w tej postaci (tak jak i w pierwotnej), funkcja źle oblicza wartości dla danych mniejszych od zera. Ale to już zarzut bardziej do formy zadania.
Ze zmiennymi globalnymi pewnie sobie jakoś poradzisz i zmodyfikujesz kod:
int result = 1; int iter = 0; int pow_x(int a, int b) { if(iter < b) { iter++; result *= a; pow_x(a, b); } return result; }
60,245 zapytań
105,929 odpowiedzi
220,065 komentarzy
32,445 pasjonatów
Motyw:
Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡
Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.