Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Pytanie dot. rekurencji

Ostatnio zmodyfikowano 2016-07-18 06:07
Autor Wiadomość
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

C/C++
#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 );
}
P-150093
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
P-150094
« 1 »
  Strona 1 z 1