gpt4 book ai didi

c# - 为什么此递归不产生 StackOverFlowException?

转载 作者:可可西里 更新时间:2023-11-01 09:05:21 26 4
gpt4 key购买 nike

这段代码有什么问题:

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# - 为什么此递归不产生 StackOverFlowException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14085783/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com