【问题标题】:c# recursion on method calls once itself after returnc#在返回后对方法调用本身进行递归
【发布时间】:2017-11-19 03:39:29
【问题描述】:
    private static string FindBookEanOrEanOnSplits(string[] splits, int index = 0)
    {
        string id = "";
        if (index < 3)
        {
            id = Extractor.ExtractBookEanOrEan(splits[index].ToUpper());

            if (id == string.Empty)
                FindBookEanOrEanOnSplits(splits, index + 1);
        }

        return id;
    }

例如,在第二次调用之后,id不再为空然后跳出来返回但调用一次(突然回过头来)在这一行 FindBookEanOrEanOnSplits(splits, index + 1) 使 id 为空 而不是空值

【问题讨论】:

  • 您的问题是什么?没看懂!
  • 你错过了 id = FindBookEanOrEanOnSplits( ... )

标签: c# recursion return call


【解决方案1】:

你为什么要递归地这样做呢?您可以循环执行:

private static string FindBookEanOrEanOnSplits(string[] splits)
{
    string id = "";

    for (int i = 0; i < 3; i++)
    {
        id = Extractor.ExtractBookEanOrEan(splits[index].ToUpper());
        if (!string.IsNullOrEmpty(id)) break;
    }

    return id;
}

递归调用可能会让人难以调试。在这种情况下,这是完全没有必要的,因为您只是在做一个简单的索引操作并调用另一个方法。当您处理数据结构或操作时,递归很有用,这些数据结构或操作本质上是自然分层的,并且需要在每个级别维护“状态”。

【讨论】:

  • for 循环比递归还要快... :)
猜你喜欢
  • 2017-12-10
  • 1970-01-01
  • 2014-09-10
  • 2017-05-08
  • 2022-11-10
  • 2021-10-16
  • 2014-06-22
  • 1970-01-01
  • 2020-01-03
相关资源
最近更新 更多