加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 06:32:14 所属栏目:百科 来源:网络整理
导读:这段代码有什么问题? 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 app
这段代码有什么问题?
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++);
   }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读