我正在自學并遇到以下問題,我不太了解 C#(我來自 JavaScript)。請參閱下面的猜測,歡迎任何額外的解釋/澄清/更正。
下面的代碼做了什么,你將如何改進代碼(給定 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 。我錯過了什么,還是在這種情況下這是最好的簡單解決方案?
uj5u.com熱心網友回復:
根據以下公式(
注:α代表n,β代表m。
可以用代碼表示為:
public static int DoSomething(int n, int m)
{
int numerator = (m - n 1) * (n m);
int result = numerator / 2;
return result;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/460994.html
上一篇:遞回列印樹的節點時出錯
