是否存在递归到迭代或反之亦然的算法,具有最有效的输出和尾递归?
更好的语言是C#。
例如:在输入时,这个算法得到下一个简单的函数:
public static ulong Factorial(ulong n)
{
return n == 0 ? 1 : n * Factorial(n - 1);
}
处理后返回如下:
public static ulong Factorial(ulong n)
{
ulong result = 1;
for (ulong i = 1; i <= n; i++)
result = result * i;
re
我有一个关于递归函数复杂性的问题,代码(在C#中)是这样的:
public void function sort(int[] a, int n)
{
bool done = true;
int j = 0;
while (j <= n - 2)
{
if (a[j] > a[j + 1])
{
// swap a[j] and a[j + 1]
done = false;
{
j++;
}
j = n - 1;
我在C#中使用与阶乘函数相关的C#。该程序的闪电快速计算为5000,但溢出误差在10000!根据,10000!大约是
10000!=2.8x10^35659
从中可以看出,BigInteger存储在int[]数组中。如果我正确地解释int类型,它将使用4个字节,这意味着10000!使用大约4 x log10(2.8 x 10^35659) = 142636字节,其中我使用log10(n) (日志到基数10)作为n位数的近似值。这仅为143 MB,但我仍然得到堆栈溢出异常。这一切为什么要发生?
using System;
using System.Numerics;
class Program
如何在c#图中找到从子节点到顶层父节点的所有可能路径?我在图中只有一个顶级父级。所有节点都有自己的id、名称和父id。最高级别的父级的parentid为零,并且一个子级可以有多个父级。[我必须找到从H到A的所有路径,因为HEBA,HGDA和HECA我的节点如下所示。
class Node
{
public int Id { get; set; }
public List<int> ParentId { get; set; }
public string Name { get; set; }
}
我编写了一个工作良好的递归插入排序,但问题是,如果我设置n= 10000或5000或更高,无论数组的值是什么,应用程序都会停止工作。(例如矢量阵列(10000,0)
以下是代码:
void RecursiveInsertionSort(int i, vector<int> &arr)
{
if (i <= 0)
return;
RecursiveInsertionSort(i - 1, arr);
int key = arr[i];
int j = i - 1;
while (j >= 0 &
我正在开发一个程序,通过"Collatz猜想函数“运行第一个n个整数,表示为"c(x)",其中任何奇数都会被更新到三倍本身加1,而任何偶数都会被更新到自身的一半,它运行到这个数字被更新为1。这只是一个编程练习。我不想用这个来证明什么。我只想了解一些优化,比如位操作。
为了加速这个过程,我让它创建一个列表,列出它通过这个函数生成的每个唯一的数字,如果它生成一个先前生成的数字,那么它将转移到下一个输入。然而,这就产生了这样的问题:每次再次运行函数时,都要花费大量的时间检查列表中的每个元素(称为“num”)。
我使用的代码如下所示:
if x not in nums:
几个小时以来,我一直试图在网上和这个网站上找到这个问题的答案,但我并不是很了解。
我知道.NET将1MB分配给应用程序,最好是通过重新编码而不是强制堆栈大小来避免堆栈溢出。
我正在开发一个“最短路径”应用程序,它在3000个节点上工作得很好,在这一点上它会溢出。下面是导致问题的方法:
public void findShortestPath(int current, int end, int currentCost)
{
if (!weight.ContainsKey(current))
{
weight.Add(curr