fork(1) download
  1. #include <stdio.h>
  2.  
  3. void indent(int n) {
  4. for (int i = 0; i < n; ++i) printf(" ");
  5. }
  6.  
  7. int func(int n, int stack)
  8. {
  9. ++stack;
  10. if(n==0) {
  11. indent(stack); printf("[Y%d] returned func(%d) -> %d\n", stack, n, 0);
  12. return 0;
  13. }
  14. if(n==1) {
  15. indent(stack); printf("[Y%d] returned func(%d) -> %d\n", stack, n, 1);
  16. return 1;
  17. }
  18.  
  19. indent(stack); printf("[L%d] call func(%d-2)\n", stack, n);
  20. int i_ret1 = func(n-2, stack);
  21. indent(stack); printf("[R%d] call func(%d-1)\n", stack, n);
  22. int i_ret2 = func(n-1, stack);
  23. indent(stack); printf("[Y%d] returned func(%d-2) + func(%d-1) -> %d\n", stack, n, n, i_ret1 + i_ret2);
  24. return(i_ret1 + i_ret2);
  25. }
  26.  
  27. int main()
  28. {
  29. printf("[%d] call func(%d)\n", 0, 4);
  30. int i_ret = func(4, 0);
  31. printf("[%d] returned func(%d) -> %d\n", 0, 4, i_ret);
  32. return 0;
  33. }
Success #stdin #stdout 0s 4456KB
stdin
Standard input is empty
stdout
[0] call func(4)
 [L1] call func(4-2)
  [L2] call func(2-2)
   [Y3] returned func(0) -> 0
  [R2] call func(2-1)
   [Y3] returned func(1) -> 1
  [Y2] returned func(2-2) + func(2-1) -> 1
 [R1] call func(4-1)
  [L2] call func(3-2)
   [Y3] returned func(1) -> 1
  [R2] call func(3-1)
   [L3] call func(2-2)
    [Y4] returned func(0) -> 0
   [R3] call func(2-1)
    [Y4] returned func(1) -> 1
   [Y3] returned func(2-2) + func(2-1) -> 1
  [Y2] returned func(3-2) + func(3-1) -> 2
 [Y1] returned func(4-2) + func(4-1) -> 3
[0] returned func(4) -> 3