【问题标题】:Recursion: How to avoid returning before all paths are completed递归:如何避免在所有路径完成之前返回
【发布时间】:2016-11-04 00:17:38
【问题描述】:

这实际上适用于任何语言,但我使用的是 Java。这看起来很简单,但我现在已经连续编程了好几个小时,我的大脑被炸了,我只是错过了一些我认为简单的东西。请参见下面的示例。在下面的populateArray() 方法中,有一个返回调用(请参阅注释),但这会导致父方法过早返回(在所有递归完成并且mListUrls 完全填充之前)?

public ArrayList<String> startMethod( String s){

    mString = s;

    Node startNode = getNode(mString );

    populateArray(startNode, 0 );

    return mListValues;

}

private void populateArray(Node node, int i{

    if(i == 100 ){
        mListValues.add(node.value);

        //I do want to continue here, but will returning here return the startMethod() above prematurely,
        //before all recursion is completed?
        return;
    }

    if(node.first() != null){
        populateArray(node.first(), i + 1);
    }

    if(node.second() != null){
        populateArray(node.second(), i + 1);
    }

    if(node.third() != null){
        populateArray(node.third(), i + 1);
    }
}

【问题讨论】:

  • 不,return 语句只返回调用代码...可以startMethod,但同样可以是另一个populateArray 调用。您是否尝试过仔细调试代码以查看会发生什么? (请注意,检查 i 正好是 100 似乎很奇怪……您打算实现什么目标?)
  • 这只是示例代码,原则上演示我的问题。
  • 递归很少是一个好的解决方案。迭代通常是一种更简单(更好)的选择。
  • @DwB 我发现递归如此优雅:(

标签: java recursion


【解决方案1】:

当populateArray 调用自身populateArray 时,递归开始发挥作用。当任何调用返回时,它只会返回其父级,可能是 populateArray 或其他一些函数。想想一堆调用,任何返回只会弹出顶部。它不会一路返回基地。父母可以决定然后做什么。它可以决定任意数量的事物,调用其他事物,再次递归,或返回到 父级(祖父级),这可以很好地级联到根,但不一定。 p>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-14
    • 1970-01-01
    • 2019-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-06
    • 1970-01-01
    相关资源
    最近更新 更多