两个递归函数的流程图

时间:2015-10-01 19:43:03

标签: recursion flowchart

我有两个简单的功能:

a)

drawRight(x){ // where x is integer
      if(x == 0 )
         draw();
      else{
         drawRight(x-1);
         doSomething();
         drawLeft(x-1);
      }
   }

b)(非常类似于a))

drawLeft(x){ // where x is integer
      if(x == 0 )
         draw();
      else{
         drawRight(x-1);
         doSomething2();
         drawLeft(x-1);
      }
   }

我的问题是:如果我打电话,例如drawRight(5),是否可以绘制流程图?我只做了自调用recurvive函数的流程图,但无法找到解决方案。

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:1)

递归函数通常在我所知道的任何编程语言中使用堆栈来调用和处理。流程图可能并不完全遵循编程语言运行带有递归函数的代码所遵循的规则,但它展示了流程图如何运行递归代码段:

enter image description here

请注意,函数是以相反的顺序添加到堆栈中的。例如,如果 drawRight 调用 drawRightdoSomethingdrawLeft,它们将作为 drawLeftdoSomething 和 { 添加到堆栈中{1}}。这样,drawRight 将首先被调用,然后是 drawRight,最后是 doSomething。处决会按预期进行。

如果使用 case 而不是条件元素,流程图的连线会更少。

答案 1 :(得分:0)

我相信流程图看起来像这样。我为drawRight(2)做了它,因为它非常快速地变得很大

Flowchart

终端呼叫的实际顺序将是

  • 绘制
  • doSomething的
  • 绘制
  • doSomething的
  • 绘制
  • 了doSomething2
  • 绘制