【问题标题】:Calling a function from within itself in C# [duplicate]在 C# 中从自身内部调用函数 [重复]
【发布时间】:2017-10-21 20:47:33
【问题描述】:

这是 JavaScript 中非常常见的技术,但我想确保我可以在 C# 中做到这一点。

我在函数DoSomething() 中,在执行调用期间,我需要用不同的值调用同一个函数。见下文:

public bool DoSomething(int id)
{
    if(id < 100)
    {
         // Some logic here
         var someValue = id + 50;
         var outcome = DoSomething(someValue);

         // Some more logic here
    }
    else
    {
        // Some other logic here
    }
}

我看不出为什么我不能执行上述操作,但想看看这在 C# 中是否是一种不好的做法。

【问题讨论】:

  • 递归是一种不好的做法吗?但我说使用var 是,除非你不知道类型是什么;)
  • 这是一个简单的递归,完全正确。
  • @通常递归是一种使代码简洁易懂的有用技术。但是,它的性能较差,并且在非尾调用优化语言中会产生堆栈溢出异常。在递归函数和迭代函数之间进行选择时,请仔细检查您的用例。

标签: c# recursion


【解决方案1】:

这个概念被称为recursion,它不仅限于JavaScript。它实际上是一种广为人知的技术,实际上正在替换某些语言(例如方案)中的循环。

在 C# 中从自身内部调用函数也是有效的。只要确保您有一个终止条件,因为您对堆栈有限制。由于每个函数调用都会将另一个项目推送到调用堆栈,因此您最终可能会遇到所谓的堆栈溢出

【讨论】:

    【解决方案2】:

    这种技术称为Recursion

    计算机科学中的递归是一种解决问题的方法 问题取决于同一问题的较小实例的解决方案 (与迭代相反)。

    大多数计算机编程语言通过允许一个 函数在程序文本中调用自身。

    这不是一个坏习惯,但它是否适合你取决于你的用例。

    【讨论】:

      【解决方案3】:

      不,还不错。这在几乎所有编程语言中都很常见。但是,您必须注意不要陷入无限循环。

      【讨论】:

        猜你喜欢
        • 2015-05-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-09
        • 2011-11-14
        • 2011-02-18
        • 1970-01-01
        相关资源
        最近更新 更多