Pytanie dot. rekurencji
Ostatnio zmodyfikowano 2016-07-18 06:07
neferx Temat założony przez niniejszego użytkownika |
Pytanie dot. rekurencji » 2016-07-18 01:40:20 Mam taki kod, celowo podmieniłem tutaj ( else return f( p, pp, w - 1 ) * p + pp; ) kolejność z f( p, w - 1, pp ) na f( p, pp, w - 1 ) . Wynik wynosi 34. Dlaczego? Ja rozumiem to tak, że pod wartość w podmieniamy wartość pp, czyli w=1, a więc: f(1)=f(1-1)*p+pp f(0)=1 czyli 6 f(1)=1*3+3 f(0)=1 #include <iostream> using namespace std;
long int f( int p, int w, int pp ) { if( w == 0 ) { return 1; } else return f( p, pp, w - 1 ) * p + pp; }
int main() { cout << f( 3, 3, 1 ); }
|
|
aksen |
» 2016-07-18 06:07:18 Nie ma tu żadnego f(0) ani f(1). Wywoływana funkcja MA 3 ARGUMENTY a nie 1.
tok obliczeń wygląda tak:
f(3, 3, 1) = f(3, 1, 2)* 3 + 1 f(3, 1, 2) = f(3, 2, 0)* 3 + 2 f(3, 2, 0) = f(3, 0, 1)* 3 + 0 f(3, 0, 1) = 1 (tu w=0, czyli zwracamy 1)
z tego wynika, że (podstawiamy od końca) f(3, 2, 0) = f(3, 0, 1)* 3 + 0 = 1 * 3 + 0 = 3 f(3, 1, 2) = f(3, 2, 0)* 3 + 2 = 3 * 3 + 2 = 11 f(3, 3, 1) = f(3, 1, 2)* 3 + 1 = 11 * 3 + 1 = 34
|
|
« 1 » |