Professional Documents
Culture Documents
CP 07 Recursion3
CP 07 Recursion3
Swaroop Joshi
/**
* @brief Computes n! for the given n.
* Requires n >= 0
*/ int main() {
int factorial(int n) { int n = 3;
int answer = 1; int answer = factorial(n);
if (n > 0) { printf("%d! = %d\n", n, answer);
answer = n * factorial(n - 1);
}
return 0;
return answer;
}
}
Program State
n = 3
int answer = 1;
n =
answer =
if (n > 0) {
answer = n * factorial(n - 1);
n =
answer =
n =
answer =
return answer;
Program State
n = 3
int answer = 1;
n = 3
answer =
if (n > 0) {
answer = n * factorial(n - 1);
n =
answer =
n =
answer =
return answer;
Program State
n = 3
int answer = 1;
n = 3
answer = 1
if (n > 0) {
answer = n * factorial(n - 1);
n =
answer =
n =
answer =
return answer;
Program State
n = 3
int answer = 1;
n = 3
answer = 1
if (n > 0) {
answer = n * factorial(n - 1);
n = 3
answer =
n =
answer =
return answer;
Program State
n = 3
int answer = 1;
n = 3
answer = 1
if (n > 0) {
answer = n * factorial(n - 1);
n = 3
answer = 6
n =
answer =
return answer;
Program State
n = 3
int answer = 1;
n = 3
answer = 1
if (n > 0) {
answer = n * factorial(n - 1);
n = 3
answer = 6
n = 3
answer =
return answer;
Program State
n = 3
int answer = 1;
n = 3
answer = 1
if (n > 0) {
answer = n * factorial(n - 1);
n = 3
answer = 6
n = 3
answer = 6
return answer;
Program State
n = 3
int answer = 1;
n = 3
answer = 1
if (n > 0) {
answer = n * factorial(n - 1);
n = 3
answer = 6
n = 3
answer = 6
return answer;
Program State
n = 3
int answer = 1;
n = 3
answer = 1
if (n > 0) {
answer = n * factorial(n - 1);
n = 3
answer = 6
return answer;
Program State
n = 3
int answer = 1;
n = 3
answer = 1
if (n > 0) {
answer = n * factorial(n - 1);
n = 3
answer = 6
✤ First, the tracing table for the code making the call is suspended and that
tracing table is pushed onto the runtime stack
✤ The runtime stack, often called simply “the stack”, is effectively just a
stack of tracing tables, each partially lled in with the results of the code
in that tracing table as executed so far
fi
How every call works
✤ A new tracing table is created, containing the code for the function body
being called
✤ The argument values are copied from the suspended tracing table into the
parameters to start the new tracing table
n =
answer =
if (n > 0) {
answer = n * factorial(n - 1);
n =
answer =
n =
answer =
n = 3
int answer = 1;
n =3
answer =
if (n > 0) {
answer = n * factorial(n - 1);
n =
answer =
n =
answer =
n = 3
int answer = 1;
n =3
answer = 1
if (n > 0) {
answer = n * factorial(n - 1);
n =
answer =
n =
answer =
n = 3
int answer = 1;
n =3
answer = 1
if (n > 0) {
answer = n * factorial(n - 1);
n =
answer =
n =
answer =
if (n > 0) {
answer = n * factorial(n - 1);
n =
answer = Program (factorial) State
n = 3
}
int answer = 1;
n = 2
answer = 1
if (n > 0) {
n =
answer = n * factorial(n - 1);
n =
answer =
answer = }
n =
answer =
return answer;
return answer;
n = 2
int answer = 1;
n =2
answer =
if (n > 0) {
answer = n * factorial(n - 1);
n =
answer = Program (factorial) State
n = 3
}
int answer = 1;
n = 2
answer = 1
if (n > 0) {
n =
answer = n * factorial(n - 1);
n =
answer =
answer = }
n =
answer =
return answer;
return answer;
n = 2
int answer = 1;
n =2
answer = 1
if (n > 0) {
answer = n * factorial(n - 1);
n =
answer = Program (factorial) State
n = 3
}
int answer = 1;
n = 2
answer = 1
if (n > 0) {
n =
answer = n * factorial(n - 1);
n =
answer =
answer = }
n =
answer =
return answer;
return answer;
n = 2
int answer = 1;
n =2
answer = 1
if (n > 0) {
answer = n * factorial(n - 1);
n =
answer = Program (factorial) State
n = 3
}
int answer = 1;
is called… answer = }
n =
answer =
return answer;
return answer;
n = 2
on the stack… if (n > 0) {
answer = 1
n = Program (factorial)
n = 2
State
} int answer = 1;
n =
answer =
if (n > 0) {
answer =
answer =
}
n =
answer =
n = 1
int answer = 1;
n =1 Program (factorial)
n = 2
State
} int answer = 1;
n =
answer =
if (n > 0) {
answer =
answer =
}
n =
answer =
n = 1
int answer = 1;
n =1 Program (factorial)
n = 2
State
} int answer = 1;
n =
answer =
if (n > 0) {
answer =
answer =
}
n =
answer =
n = 1
int answer = 1;
n =1 Program (factorial)
n = 2
State
answer =
answer =
is called… }
n =
answer =
n = 2
answer = 1
if (n > 0) {
answer = n * factorial(n - 1);
n =
answer =
}
n =
answer =
return answer;
Program (factorial) State
n = 3
int answer = 1;
n =
answer =
if (n > 0) {
answer = n * factorial(n - 1);
n =
answer =
}
n =
answer =
return answer;
Program (main) State
int n = 3;
n = 3
int answer = factorial(n);
n =
answer =
printf("%d! = %d\n", n, answer);
A new tracing table for
Program (factorial) State the called function is
Program (factorial)
n = 1
State
n = 0
answer = 1
value answer =
int answer = 1;
}
n =
answer =
return answer;
n = Program (factorial)
n = 2
State
} int answer = 1;
n =
answer =
if (n > 0) {
answer =
answer =
}
n =
answer =
int answer = 1;
n = 1
n = 0
answer = 1
if (n > 0) {
answer = n * factorial(n - 1);
n =
answer =
int answer = 1;
}
n =
answer =
return answer;
n =0 Program (factorial)
n = 2
State
} int answer = 1;
n =
answer =
if (n > 0) {
answer =
answer =
}
n =
answer =
int answer = 1;
n = 1
n = 0
answer = 1
if (n > 0) {
answer = n * factorial(n - 1);
n =
answer =
int answer = 1;
}
n =
answer =
return answer;
n =0 Program (factorial)
n = 2
State
} int answer = 1;
n =
answer =
if (n > 0) {
answer =
answer =
}
n =
answer =
int answer = 1;
n = 1
n = 0
answer = 1
if (n > 0) {
answer = n * factorial(n - 1);
n =
answer =
int answer = 1;
}
n =
answer =
return answer;
n =0 Program (factorial)
n = 2
State
} int answer = 1;
n =
answer =
if (n > 0) {
answer =
answer =
}
n =
answer =
int answer = 1;
n = 1
n = 0
answer = 1
if (n > 0) {
answer = n * factorial(n - 1);
n =
answer =
int answer = 1;
}
n =
answer =
return answer;
n =0 Program (factorial)
n = 2
State
} int answer = 1;
n =
answer =
if (n > 0) {
answer =
answer =
}
n =
answer =
int answer = 1;
n = 1
n = 0
answer = 1
if (n > 0) {
answer = n * factorial(n - 1);
n =
answer =
int answer = 1;
}
n =
answer =
return answer;
n =0 Program (factorial)
n = 2
State
} int answer = 1;
n =
answer =
=0
if (n > 0) {
answer =
answer =
}
n =
answer =
int answer = 1;
n = 1
n = 0
answer = 1
if (n > 0) {
answer = n * factorial(n - 1);
n =
answer =
int answer = 1;
}
n =
answer =
return answer;
n =0 Program (factorial)
n = 2
State
} int answer = 1;
n =
answer =
=0
if (n > 0) {
answer = 1
answer =
}
n =
answer =
n = 1
int answer = 1;
n =1 Program (factorial)
n = 2
State
} int answer = 1;
n =
answer =
if (n > 0) {
answer =
answer =
}
n =
answer =
int answer = 1;
n =1 Program (factorial)
n = 2
State
} int answer = 1;
n =
answer =
if (n > 0) {
answer =
answer =
}
n =
answer =
n = 1
int answer = 1;
n =1 Program (factorial)
n = 2
State
} int answer = 1;
n =
n = 1
int answer = 1;
n =1 Program (factorial)
n = 2
State
=1
}
n n =
answer =
} int answer = 1;
n =
answer =
if (n > 0) {
answer =
answer =
}
n =
answer =
n = 1
int answer = 1;
n =1 Program (factorial)
n = 2
State
=1
}
n n =
answer =
} int answer = 1;
n =
answer =
if (n > 0) {
answer = 1
answer =
}
n =
answer =
n = 2
int answer = 1;
n =2
answer = 1
if (n > 0) {
answer = n * factorial(n - 1);
n =
answer = Program (factorial) State
n = 3
} int answer = 1;
n =
answer =
if (n > 0) {
answer =
answer =
}
n =
answer =
int answer = 1;
n =2
answer = 1
if (n > 0) {
answer = n * factorial(n - 1);
n =
answer = Program (factorial) State
n = 3
} int answer = 1;
n =
answer =
if (n > 0) {
answer =
answer =
}
n =
answer =
n = 2
int answer = 1;
n =2
answer = 1
if (n > 0) {
answer = n * factorial(n - 1);
n =
answer = Program (factorial) State
} int answer = 1;
n =
n = 2
int answer = 1;
n =2
answer = 1
if (n > 0) {
answer = n * factorial(n - 1);
n =2
answer = 2 Program (factorial) State
n = 3
} int answer = 1;
n =
answer =
if (n > 0) {
answer =
answer =
}
n =
answer =
n = 2
int answer = 1;
n =2
answer = 1
if (n > 0) {
answer = n * factorial(n - 1);
n =2
answer = 2 Program (factorial) State
n = 3
} int answer = 1;
n =
answer =
if (n > 0) {
answer = 2
answer =
}
n =
answer =
n = 3
int answer = 1;
n =3
answer = 1
if (n > 0) {
answer = n * factorial(n - 1);
n =
answer =
n =
answer =
int answer = 1;
n =3
answer = 1
if (n > 0) {
answer = n * factorial(n - 1);
n =
answer =
n =
answer =
n = 3
int answer = 1;
n =3
answer = 1
if (n > 0) {
answer = n * factorial(n - 1);
n =
answer =
n = 3
int answer = 1;
n =3
answer = 1
if (n > 0) {
answer = n * factorial(n - 1);
n =3
answer = 2
n =
answer =
n = 3
int answer = 1;
n =3
answer = 1
if (n > 0) {
answer = n * factorial(n - 1);
n =3
answer = 2
n =3
answer = 6
✤ This was just to show you how function calls work so you know how
recursion works
Conclusion
✤ This was just to show you how function calls work so you know how
recursion works
✤ But this is not how you should think about writing elegant recursive
solutions …
Conclusion
✤ This was just to show you how function calls work so you know how
recursion works
✤ But this is not how you should think about writing elegant recursive
solutions …