4
我試圖用for循環轉換爲遞歸方法作爲編碼Kata實踐(試圖解決遞歸方法的問題)的一部分。邏輯上沒有多少東西,但是無法插入遞歸函數斷點VS2013
- 遞歸方法中的任何地方都不會觸發斷點。
- 我試圖放置一個記錄器(控制檯輸出)來檢查方法是否被調用,但沒有記錄。
這裏的方法定義(一個或多個):
// Original method with for loop
public IEnumerable<Tuple<int, int>> GetElementWithLargestDeltaOnTimeline(int[] a)
{
int runningLindex = 0;
int currLValue = a[0];
int runningHindex = 1;
int currHvalue = a[1];
int currDelta = 0;
for (int i = 1; i < a.Length - 1; i++)
{
if (a[i] < currLValue)
{
currLValue = a[i];
runningLindex = i;
}
for (int j = runningLindex + 1; j < a.Length; j++)
{
if ((a[j] - currLValue) > currDelta)
{
currDelta = a[j] - currLValue;
runningHindex = j;
currHvalue = a[j];
}
}
}
yield return new Tuple<int, int>(currLValue, runningLindex);
yield return new Tuple<int, int>(currHvalue, runningHindex);
}
遞歸 -
// Trying above method to convert to recursive,
// Note - It may not be correct *shy* but the problem is why it's not doing anything(not step through/logging)
public IEnumerable<Tuple<int, int>> GetElementWithLargestDeltaOnTimelineRec
(int[] a, int i, int j, int runningLindex, int currLValue, int runningHindex, int currHvalue, int currDelta)
{
Console.WriteLine("Iteration i-{0}: j-{1} runningLindex-{2} currLValue-{3} runningHindex-{4} currHvalue-{5} currDelta-{6}"
, i, j, runningLindex, currLValue, runningHindex, currHvalue, currDelta);
if (i < a.Length)
{
if (a[i] < currLValue)
{
currLValue = a[i];
runningLindex = i;
}
if (j < a.Length)
{
if ((a[j] - currLValue) > currDelta)
{
currDelta = a[j] - currLValue;
runningHindex = j;
currHvalue = a[j];
}
GetElementWithLargestDeltaOnTimelineRec(a, i, j++, runningLindex, currLValue, runningHindex, currHvalue, currDelta);
}
}
else
{
yield return new Tuple<int, int>(currLValue, runningLindex);
yield return new Tuple<int, int>(currHvalue, runningHindex);
}
GetElementWithLargestDeltaOnTimelineRec(a, i++, runningLindex + 1, runningLindex, currLValue, runningHindex, currHvalue, currDelta);
yield break;
}
主 -
public class Program
{
public static void Main()
{
var a = new[] { 10, 9, 3, 6, 7, 8, 15, 10, 6 };
var val = new StockManager();
var result = val.GetElementWithLargestDeltaOnTimelineRec(a, 0, 0, 0, a[0], 1, a[1], 0);
}
}
問題(S) -
- 遞歸方法調用是什麼(不正確),這是造成 的問題?
- 爲什麼該方法沒有被調用並返回空的 結果沒有失敗/錯誤/警告?
其他信息 - .NET 4.5時,Visual Studio 2013
我也試着運行不同的機器上的代碼(只是爲了驗證,如果事情是錯我的VS實例)。
鑑於您發佈的示例代碼,您的方法實際上並未執行:它返回一個「IEnumerable」,並且您沒有執行任何操作。嘗試在'Main()'中迭代'result',你會看到記錄的東西。 –