递归函数

时间:2017-04-18 05:59:33

标签: c# recursion

我想从我的字符串数组中获取任何非空值(从反向开始)。我想使用递归函数来实现我的目标。以下是我编写的代码示例。

protected string getInvNo(string[] arg, int lengthV)
{
    if (arg[lengthV] != "")
        return arg[lengthV];
    else if (lengthV >= 0)
        getInvNo(arg, lengthV-1);
    else
        return "";
}

显示错误并非所有路径返回值。请求帮助我,我想念的是什么。感谢。

3 个答案:

答案 0 :(得分:1)

lengthV > 0会将超出范围的索引修复为-1。

static string getInvNo(string[] arg, int lengthV)
{
    if (arg[lengthV] != "")
    {
        return arg[lengthV];
    }

    return lengthV > 0 ? getInvNo(arg, lengthV - 1) : "";
}

答案 1 :(得分:1)

我建议您重新设计代码:

  1. 您已在<property name="net.sf.jasperreports.export.xls.remove.empty.space.between.columns" value="true"/> <property name="net.sf.jasperreports.export.xls.remove.empty.space.between.rows" value="true"/> <property name="net.sf.jasperreports.export.xls.white.page.background" value="false"/> <property name="net.sf.jasperreports.export.xls.wrap.text" value="true"/> <property name="net.sf.jasperreports.print.keep.full.text" value="true"/>
  2. 中省略了return
  3. 如果数组的项目是getInvNo(arg, lengthV-1);怎么办?如果我们必须跳过它以及清空null一个,""是选择
  4. 添加验证(因为方法是string.IsNullOrEmpty我可以继承你的类并使用任何参数调用方法我喜欢)
  5. 将方法更改为protected
  6. 实现:

    static

    请注意,通常我们会在没有复发的情况下解决这些问题:

    // static: you don't use "this" in the context, and the method is not a virtual one
    protected static string getInvNo(string[] arg, int index)
    {
        // Validation
        if (null == arg)
          throw new ArgumentNullException("arg");
        else if (index >= arg.Length)
          index = arg.Length - 1; // or throw ArgumentOutOfRangeException("index"); 
    
        // Stop conditions:
        if (index < 0)                               // 1. Array exhausted
            return ""; 
        else if (!string.IsNullOrEmpty(arg[index]))  // 2. We've found non-empty value
            return arg[index];
    
        return getInvNo(arg, index - 1);
    }
    

答案 2 :(得分:-1)

回到这里:

if (arg[lengthV] != "")
       return arg[lengthV];
else if (lengthV >= 0)
      getInvNo(arg, lengthV-1);
      return "this is your missing return value";
else
      return "";