2014-02-25 24 views
0

请解释如何对特里结构的一个简单的递归解析return语句功能递归带或不带return语句中中止条件

CASE答:

if (true) push &stack; //push path result onto a stack 
else{ 
    if (terminating condition true) return; 
    else { 
     condition 1 recursion to next node 
     condition 2 recursions to next node 
     ... 
     condition n recursion to next node 
    } 
    recursion to next path; 
} 

案例B:

if (true) { 
    push &stack; //push path result onto a stack 
    return; 
}else{ 
    if (terminating condition true) return; 
    else{ 
     condition 1 recursion to next node 
     condition 2 recursion to next node 
     ... 
     condition n recursion to next node 
    } 
    recursion to next path; 
} 

案例A对我来说工作得很好。但是,我不明白将结果推入堆栈后会发生什么。它如何知道终止这些路径?

+0

那么你是否知道递归fn的工作? – 999k

+0

@ 555k我不知道你的意思是“知道递归fn的工作” –

回答

1

对于返回类型为void的函数,返回语句不是严格必要的。如果在没有遇到return语句的情况下达到此函数的结尾,则控制权将传递给调用方,就像遇到没有表达式的return语句一样。换句话说,隐式返回在最终语句完成时发生,并且控制自动返回到调用函数。无论如何,您不需要为另一行代码付费,添加return语句是一种很好的做法。
但请注意,对于使用非void返回类型声明的函数,这是必需的。它有时没有返回语句,例如,这个:Confused about the function return value。但这是未定义行为的结果。

0

案例A的工作原理是将结果推送到堆栈或向量,或者使用任何结构,然后终止该特定路径。如果有返回,它会启动堆栈的解析并回溯前面的迭代。所以,在情况B中,只能找到一个结果。