Pregunta

int j(int i) {
    if (i==0) return 2;
    return i*j(i-1);
}

calling j(4) gives 48.

I feel like I do understand the code, but don't know how 48 was achieved.

This is how I interpret it,

int j(4){

4 is not equal to 0 so it won't return 2

4*j(i-1) = 4*j(3)

then i go back to the top and repeat

3*j(2)
2*j(1)
1*j(0)

now i return 2.

This is where am lost, i'm not quite sure what to do after this step and how the answer to j(4) is 48.

¿Fue útil?

Solución

The evaluation can be understood like this

j(4)
4 * j(3)
4 * (3 * j(2))
4 * (3 * (2 * j(1)))
4 * (3 * (2 * (1 * j(0))))   // When input to j is 0, returns 2
4 * (3 * (2 * (1 * 2)))
4 * (3 * (2 * 2))
4 * (3 * 4)
4 * 12
48

Till recursion reaches j(0), it goes deeper and deeper. But when it reaches it, it begins to unwind the recursion. And the most important thing is,

if (i==0) return 2;

is called the base condition of your recursion.

Otros consejos

j(0) clearly returns 2, right?

So j(1) returns 1*j(0), and j(0) is 2. So j(1) returns 2*1, or 2.

j(2) returns 2*j(1) or 2*2 or 4.

j(3) returns 3*j(2) or 3*4 or 12.

j(4) returns 4*j(3) or 4*12 or 48.

so this is calling

return 4 * 3 * 2 * 1 * 0 (no not 0 use 2)

result 48

You can trace through it:

j(4) = 4 * j(3) = 4 * (3 * j(2)) = 4 * 3 * 2 * j(1) 
     = 4 * 3 * 2 * 1 * j(0) = 4 * 3 * 2 * 1 * 2 = 48
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top