gpt4 book ai didi

c# - 为什么在尝试使用相同参数运行相同方法时会出现溢出异常?

转载 作者:行者123 更新时间:2023-11-30 20:27:17 24 4
gpt4 key购买 nike

正在考虑创建一个支持 uint、long 和 ulong 的随机数生成器。我必须制作随机 uint 生成器,但在制作最小、最大生成器时卡住了。

这是我的

public class Rand : System.Random

public uint UInt32(uint min, uint max)
{
byte[] array = new byte[4];

base.NextBytes(array);

uint result = BitConverter.ToUInt32(array, 0);

if (result < min | result > max)
{
UInt32(min, max); //here i get a StackOverflowException
}
return result;
}

为什么我在尝试使用相同的参数运行相同的方法时得到一个 StackOverflowException

最佳答案

您的程序退出递归调用的能力取决于区间 [min..max] 的长度。间隔越小,命中 StackOverflowException 的概率就越高。

由于您生成的是 4 字节整数,因此您有 232 个可能的值。假设随机值均匀分布,命中 minmax 区间的概率等于 (max-min)*2-32 .继续递归调用的概率为1-(max-min)*2-32。如果您希望递归调用有机会在合理数量的调用内结束,minmax 之间的间隔与 2 相比应该相当大32.

您可以通过将递归代码转换为迭代代码来避免堆栈溢出,但代价是代码相当慢(您的递归实现也是错误的,因为它会丢弃递归调用的结果,但无论如何都不值得修复)。

关于c# - 为什么在尝试使用相同参数运行相同方法时会出现溢出异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48826644/

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