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