我有两个简单的功能:
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函数的流程图,但无法找到解决方案。
任何帮助都将不胜感激。
答案 0 :(得分:1)
递归函数通常在我所知道的任何编程语言中使用堆栈来调用和处理。流程图可能并不完全遵循编程语言运行带有递归函数的代码所遵循的规则,但它展示了流程图如何运行递归代码段:
请注意,函数是以相反的顺序添加到堆栈中的。例如,如果 drawRight
调用 drawRight
、doSomething
和 drawLeft
,它们将作为 drawLeft
、doSomething
和 { 添加到堆栈中{1}}。这样,drawRight
将首先被调用,然后是 drawRight
,最后是 doSomething
。处决会按预期进行。
如果使用 case 而不是条件元素,流程图的连线会更少。
答案 1 :(得分:0)