fork 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.  
  11. if(n==0) {
  12. indent(stack); printf("[Y%d] %d <- return func(%d)\n", stack, 0, n);
  13. return 0;
  14. }
  15. if(n==1) {
  16. indent(stack); printf("[Y%d] %d <- return func(%d)\n", stack, 1, n);
  17. return 1;
  18. }
  19.  
  20. indent(stack); printf("[L%d] call func(%d-2)\n", stack, n);
  21. int i_ret1 = func(n-2, stack);
  22. indent(stack); printf("[A%d] %d <- func(%d-2)\n", stack, i_ret1, n);
  23.  
  24. indent(stack); printf("[R%d] call func(%d-1)\n", stack, n);
  25. int i_ret2 = func(n-1, stack);
  26. indent(stack); printf("[B%d] %d <- func(%d-1)\n", stack, i_ret2, n);
  27.  
  28. indent(stack); printf("[Y%d] %d <- return func(%d-2) + func(%d-1)\n", stack, i_ret1 + i_ret2, n, n);
  29. return(i_ret1 + i_ret2);
  30. }
  31.  
  32. #define X 4
  33.  
  34. int main() {
  35. printf("[%d] call func(%d)\n", 0, X);
  36. int i_ret = func(X, 0);
  37. printf("[%d] %d <- func(%d)\n", 0, i_ret, X);
  38. return 0;
  39. }
  40.  
Success #stdin #stdout 0s 4496KB
stdin
Standard input is empty
stdout
[0] call func(4)
    [L1] call func(4-2)
        [L2] call func(2-2)
            [Y3] 0 <- return func(0)
        [A2] 0 <- func(2-2)
        [R2] call func(2-1)
            [Y3] 1 <- return func(1)
        [B2] 1 <- func(2-1)
        [Y2] 1 <- return func(2-2) + func(2-1)
    [A1] 1 <- func(4-2)
    [R1] call func(4-1)
        [L2] call func(3-2)
            [Y3] 1 <- return func(1)
        [A2] 1 <- func(3-2)
        [R2] call func(3-1)
            [L3] call func(2-2)
                [Y4] 0 <- return func(0)
            [A3] 0 <- func(2-2)
            [R3] call func(2-1)
                [Y4] 1 <- return func(1)
            [B3] 1 <- func(2-1)
            [Y3] 1 <- return func(2-2) + func(2-1)
        [B2] 1 <- func(3-1)
        [Y2] 2 <- return func(3-2) + func(3-1)
    [B1] 2 <- func(4-1)
    [Y1] 3 <- return func(4-2) + func(4-1)
[0] 3 <- func(4)