Я хотел получить сводку всех элементов массива с помощью рекурсии Вот код.
static int SummaryOfArray(int[]myArray, int i = 0, int result = 0)
{
result += myArray[i];
i++;
if (i >= myArray.Length)
{
return result;
}
else
{
SummaryOfArray(myArray, i,result); //<---if I put the "result = " on the top here
return result;
}
}
static void Main(string[] args)
{
int[] arr = { 3, 2, 5};
Console.WriteLine(SummaryOfArray(arr));
}
Если я помещу «результат =» в начало кода, моя программа будет работать хорошо и даст
правильное резюме элементов массива,
но если я удалю, это даст мне "3" в результате.
Но почему??? вообще не понимаю, просмотрел кучу материалов и видео
насчет рекурсии, но я так и не понял зачем.
Я понимаю "последним пришел последним вышел", но почему "результат" меняется с 10 на 3
в конце?
И отладить код.
Подумайте о классическом примере рекурсии; fib(n) => fib(n-1) + fib(n-2);. Первый вызов fib возвращает окончательный результат. В вашем случае вы хотите, чтобы SummaryOfArray возвращал первое значение плюс сумму оставшихся строк.





static int SummaryOfArray(int[] myArray, int i = 0, int result = 0)
{
if (myArray.Length == i) return result;
else return SummaryOfArray(myArray,i+1,result+myArray[i] );
}
Попробуй это.
Установите точку останова. Отлаживать. Подсказка:
int— это тип значения, поэтому копия передаетсяSummaryOfArrayво вложенном вызове. Это оставляет вас сresult += myArray[i];.