我想为任何递归方法绘制调用堆栈,所以我创建了一个这样的模式,
recursiveMethod(){
//Break recursion condition
if(){
// Add value here to the return values' list- No drawing
return
}
else{
//Draw stack with the value which will be pushed to the stack here
variable <- recursiveMethod()
//Clear the drawing which represents the poped value from the stack here
return variable
}}
应用架构将看起来像这样的东西,
alt text http://i40.tinypic.com/11tbrdf.jpg
注意:
你怎么看待这个?任何建议都非常欢迎。
答案 0 :(得分:1)
我不确定我是否正确理解了你的问题,但是会对它进行一次尝试,如果这是不正确的,请告诉我。
我收集的是你想要一些方法来跟踪你在递归函数中的堆栈。你可以做到这一点的一种方法是拥有一个Stack数据结构,一个绘制数据结构的函数,你希望如何绘制它取决于你,现在可能只是像[---]
那样绘制堆栈。 '-'
是递归深度。
这是一个近似C ++的例子:
所以我们有:
Stack recursiveFunctionTrackingStack; //Stack of something, maybe just '-'
void DrawStack(const Stack& aStack);
和另一种类型:
struct StackUpdater
{
StackUpdater(){ recursiveFunctionTrackingStack.push('-'); }
StackUpdater(const string& somevalue)
{
recursiveFunctionTrackingStack.push(somevalue);
}
~StackUpdater(){ recursiveFunctionTrackingStack.pop(); }
}
因此'StackUpdater'在创建对象时会在Stack数据结构上推送一些东西,并在它被破坏时弹出它。
现在在我们可以做的递归函数中(使用你的代码片段):
recursiveMethod(){
if(){ return }
else{
{
StackUpdater su(pushedInValue); //Value pushed
variable <- recursiveMethod();
DrawStack(recursiveFunctionTrackingStack);
} //Value popped on destruct.
DrawStack(recursiveFunctionTrackingStack);
return variable
}}
也许你想要的是沿着那条线。如果没有,那么请澄清你的问题。
希望这无论如何都有帮助。