解决此递归的最佳方法是什么?
What is the best way to solve for this recursion?
我自学遇到了下面的问题,我对C#了解不多(我来自JavaScript)。请参阅下面的猜测,欢迎任何额外的 explanation/clarification/correction。
以下代码的作用是什么以及您将如何改进代码(给定 n=1 和 m=10)?
class Program
{ public static int DoSomething(int n, int m)
{
int x = n;
if (n < m)
{
n++;
return x += DoSomething(n, m);
}
return x;
}
static void Main(string[] args)
{
Console.WriteLine("Enter n: ");
int n = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Enter m: ");
int m = Convert.ToInt32(Console.ReadLine());
int x = DoSomething(n, m) ;
Console.WriteLine(x);
Console.ReadKey();
}
}
所以这显然是一个递归问题吧?看起来它会递增 n 直到它大于 m,然后将该数字写入控制台。所以最终它会将 11 记录到控制台(我假设总共,它会将 1-11 记录到控制台)。递归是多余的和不必要的,所以对我来说简单的解决方案就是将它转换为一个简单的 while 循环,只要 n < m,Console.WriteLine(n) 和 n++。我是否遗漏了什么,或者这是这种情况下最好的简单解决方案?
根据下面的公式(source),你可以重写你的代码作为计算:
注:α代表n
,β代表m
.
可以用代码表示为:
public static int DoSomething(int n, int m)
{
int numerator = (m - n + 1) * (n + m);
int result = numerator / 2;
return result;
}
我自学遇到了下面的问题,我对C#了解不多(我来自JavaScript)。请参阅下面的猜测,欢迎任何额外的 explanation/clarification/correction。
以下代码的作用是什么以及您将如何改进代码(给定 n=1 和 m=10)?
class Program
{ public static int DoSomething(int n, int m)
{
int x = n;
if (n < m)
{
n++;
return x += DoSomething(n, m);
}
return x;
}
static void Main(string[] args)
{
Console.WriteLine("Enter n: ");
int n = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Enter m: ");
int m = Convert.ToInt32(Console.ReadLine());
int x = DoSomething(n, m) ;
Console.WriteLine(x);
Console.ReadKey();
}
}
所以这显然是一个递归问题吧?看起来它会递增 n 直到它大于 m,然后将该数字写入控制台。所以最终它会将 11 记录到控制台(我假设总共,它会将 1-11 记录到控制台)。递归是多余的和不必要的,所以对我来说简单的解决方案就是将它转换为一个简单的 while 循环,只要 n < m,Console.WriteLine(n) 和 n++。我是否遗漏了什么,或者这是这种情况下最好的简单解决方案?
根据下面的公式(source),你可以重写你的代码作为计算:
注:α代表n
,β代表m
.
可以用代码表示为:
public static int DoSomething(int n, int m)
{
int numerator = (m - n + 1) * (n + m);
int result = numerator / 2;
return result;
}