递归方法返回不需要的值

时间:2015-03-11 04:13:52

标签: c# recursion

我有一个函数需要在完成某些操作时返回一个值。我不会厌倦你的细节。 我的函数调用自身,所以它是递归的。现在,当我从elswhere调用它时,我想能够获得此函数的结果值。 所以这是代码:

public int compute(string[] myarray)
{
    if (hasParantesisBlock)
    {
        // do stuff
        // remove paranthesis block from myarray
        String[] newArray = removeBlockFromArray(myarray);
        // recursive call                   
        compute(newArray);
    }
    else
    {
        // do other stuff obtaining a value
        return value;
    }
    return 0; // if I remove this I get error
}

我称之为:

int myval = compute(myStringArray);

我有一个字符串数组,我想从myStringArray中删除括号中的块。我在我的函数计算中这样做,直到那里没有更多的括号块。当发生这种情况时,我想对字符串数组的元素进行计数(例如,不是一个好例子),我想在主代码中返回该值。

由于最后一次“返回0;”,我总是收到0.但如果我从递归方法中显示结果(值)......我得到了正确的值。

如果我的字符串数组中有2个圆括号,那么我将获得2个ZERO值,如果我有3个块,那么我将获得3个ZERO结果....

我不希望那些ZERO结果。我只想返回字符串Array中没有剩余块时获得的值。

所以步骤是这样的:

- does it have a block?
   - yes. remove block and recall with changed array
     - does it have a block?
       - yes. remove block and recall with changed array
          - does it have a block?
          - no. RETURN my value (!!! this is the only return I want to receive)
       - standard return
   - standard return

我该怎么做?

1 个答案:

答案 0 :(得分:2)

彼得说,

删除返回0;而是返回compute(newArray)的值。

(不能评论,因为我没有足够的代表)。

public int compute(string[] myarray)
{
    if (hasParantesisBlock)
    {
            // do stuff
            // remove paranthesis block from myarray
            String[] newArray = removeBlockFromArray(myarray);
            // recursive call                   
            return compute(newArray);
    }
    else
    {
          // do other stuff obtaining a value
          return value;
    }
}

没有查看整个代码我可以看到一些可能的陷阱。比如不使用方法中的返回值。如在

return compute(newArray)++;