我有一些遞回問題要解決(經過一番掙扎,我最終取得了勝利)我使函式(為它們計算結果)無效,并且在遞回函式的每次迭代之后,我呼叫“Console.WriteLine()”來列印在我繼續遞回直到滿足某個條件之后,我將計算函式呼叫到 Main 函式中。現在我想嘗試將它們轉換為字串并使它們更清晰,然后使用 Console.WriteLine() 呼叫 Main 內部的函式。例如下面的代碼。
public static void TowerOfHanoi(int n, char firstRod, char secondRod, char thirdRod)
{
if (n == 0)
{
return;
}
TowerOfHanoi(n - 1, firstRod, thirdRod, secondRod);
Console.WriteLine("From " firstRod " to " secondRod);
TowerOfHanoi(n - 1, thirdRod, secondRod, firstRod);
}
這是針對河內塔問題的,我必須使用中間桿 C 將整疊光碟從某個桿移動到另一個桿(在我的問題中從 A 到 B)。規則:我不能有光碟較大的放在較小的圓盤之上,因此我所做的每一步都必須將較小的圓盤保持在較大的圓盤之上。
我試圖將函式從 void 更改為 string 并在其中添加一個新的空字串,例如:
字串結果 = ""; 而不是 Console.WriteLine 我嘗試使用 result = "From " firstRod " to " secondRod "\n"; 然后使用 Console.WriteLine 將該函式呼叫到 Main 中。=> 在這里我碰壁了。
這是我轉換它的失敗嘗試:如果我輸入 2 作為輸入,它應該回傳:
從 A 到 C 從 A 到 B 從 C 到 B。
但由于我的嘗試失敗,它只回傳從 A 到 B。我知道我應該有一個變數,我應該在每次遞回后添加所有結果,但我似乎無法弄清楚
public static string TowerOfHanoi(int n, char firstRod, char secondRod, char thirdRod)
{
if (n == 0)
{
return "";
}
TowerOfHanoi(n - 1, firstRod, thirdRod, secondRod);
TowerOfHanoi(n - 1, thirdRod, secondRod, firstRod);
return "From " firstRod " to " secondRod "\n";
}
你對我該如何解決這個問題有什么建議嗎?先感謝您!
uj5u.com熱心網友回復:
您更新的代碼以兩種方式顯著改變了原始代碼的邏輯:
- “from ... to”結果現在位于兩個遞回呼叫之后,而之前它位于兩個遞回呼叫之間。
- 這些遞回呼叫的結果被完全忽略。如果一個方法回傳一個結果,而你想要那個結果,你必須以某種方式捕獲它。
例如:
var result = string.Empty;
if (n == 0)
{
return result;
}
result = TowerOfHanoi(n - 1, firstRod, thirdRod, secondRod);
result = "From " firstRod " to " secondRod "\n";
result = TowerOfHanoi(n - 1, thirdRod, secondRod, firstRod);
return result;
StringBuilder然后,您可以通過使用 a而不是附加字串來開始稍微改進功能:
if (n == 0)
{
return string.Empty;
}
var result = new StringBuilder();
result.Append(TowerOfHanoi(n - 1, firstRod, thirdRod, secondRod));
result.Append("From " firstRod " to " secondRod "\n");
result.Append(TowerOfHanoi(n - 1, thirdRod, secondRod, firstRod));
return result.ToString();
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/430013.html
標籤:C#
上一篇:改進變數呼叫
下一篇:在類之間重用方法
