Question 2: Predict the output of the following program.
void
fun(
int
n)
{
if
(n > 0)
{
fun(n-1);
printf
(
"%d "
, n);
fun(n-1);
}
}
int
main()
{
fun(4);
return
0;
}
Output
1 2 1 3 1 2 1 4 1 2 1 3 1 2 1
fun(4) / fun(3), print(4), fun(3) [fun(3) prints 1 2 1 3 1 2 1] / fun(2), print(3), fun(2) [fun(2) prints 1 2 1] / fun(1), print(2), fun(1) [fun(1) prints 1] / fun(0), print(1), fun(0) [fun(0) does nothing]Question 1 What does the following fun() do in general?
Answer: 8
int
fun (
int
n,
int
*fp )
{
int
t, f;
if
( n <= 1 )
{
*fp = 1;
return
1;
}
t = fun ( n-1, fp );
f = t + *fp;
*fp = t;
return
f;
}
int
main()
{
int
x = 15;
printf
(
"%d\n"
,fun(5, &x));
return
0;
}
The program calculates nth Fibonacci Number. The statement t = fun ( n-1, fp ) gives the (n-1)th Fibonacci number and *fp is used to store the (n-2)th Fibonacci Number. Initial value of *fp (which is 15 in the above prgram) doesn’t matter. Following recursion tree shows all steps from 1 to 10, for exceution of fun(5, &x).
(1) fun(5, fp) / \ (2) fun(4, fp) (10) t = 5, f = 8, *fp = 5 / \ (3) fun(3, fp) (9) t = 3, f = 5, *fp = 3 / \ (4) fun(2, fp) (8) t = 2, f = 3, *fp = 2 / \ (5) fun(1, fp) (7) t = 1, f = 2, *fp = 1 / (6) *fp = 1