c# – 为什么这个递归不会产生StackOverFlowException?

前端之家收集整理的这篇文章主要介绍了c# – 为什么这个递归不会产生StackOverFlowException?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
这段代码有什么问题?
using System;
namespace app1
{
    static class Program
    {
        static int x = 0;
        static void Main()
        {
            fn1();
        }
        static void fn1()
        {
            Console.WriteLine(x++);
            fn1();
        }
    }
}

我使用这个命令编译这段代码

csc /warn:0 /out:app4noex.exe app4.cs

当我双击exe时,似乎并没有抛出异常(StackOverFlowException),并且永远保持运行.

使用visual studio命令提示2010,但我也有vs 2012安装在系统上,都是最新的.

解决方法

因为优化器会将尾部递归调用展开为:
static void fn1()
    {
      START:

        Console.WriteLine(x++);
        GOTO START;
    }

重写以获得例外:

static int y;

   static void fn1()
   {
       Console.WriteLine(x++);
       fn1();
       Console.WriteLine(y++);
   }

猜你在找的C#相关文章