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++); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |