Predict the output:
C
#include <stdio.h>void crazy(int n, int a, int b){ if (n <= 0) return; crazy(n - 1, a, b + n); printf("%d %d %d \n",n,a,b); crazy(n-1, b, a+n);}int main(){ crazy(3, 4, 5); return 0;} |
(A)
1 4 10 2 4 8 1 8 6 3 4 5 1 5 9 2 5 7 1 7 7
(B)
3 4 5 1 4 10 2 4 8 1 8 6 1 5 9 2 5 7 1 7 7
(C)
1 4 10 2 4 8 1 8 6 3 4 5
(D)
3 4 5 1 5 9 2 5 7 1 7 7
Answer: (A)
Explanation:
Call(3,4,5)
- crazy(3, 4, 5) calls crazy(2, 4, 5 + 3)
- crazy(2, 4, 8) calls crazy(1, 4, 8 + 2)
- crazy(1, 4, 10) calls crazy(0, 4, 10 + 1)
- crazy(0, 4, 11) returns immediately as the base case is reached. and prints 1, 4, 10.
- crazy(0, 11,4). return as the base case is reached.
Now, we wrap up the recursive calls:
- call crazy(2,4,8) prints 2,4,8 and again call for crazy(1,8, 6). which will print 1,8,6.
- call crazy(3,4,5) prints 3,4,5 and again call for crazy(2,5, 7). which will again call for (1,5,9) prints 1 5 9.
- call crazy (2,5,7) prints 2,5,7 and again call for crazy(1,7,7), which will print 1,7,7.
Hence (A) is the correct Option.
Quiz of this Question
Please comment below if you find anything wrong in the above post

… [Trackback]
[…] Here you will find 46892 more Info on that Topic: geeksforgeeks.org/algorithms-recursion-question-9/ […]
… [Trackback]
[…] Read More to that Topic: geeksforgeeks.org/algorithms-recursion-question-9/ […]
… [Trackback]
[…] Read More on on that Topic: geeksforgeeks.org/algorithms-recursion-question-9/ […]
… [Trackback]
[…] Info to that Topic: geeksforgeeks.org/algorithms-recursion-question-9/ […]