Софтуерно Инженерство
Loading...
+ Нов въпрос
AlexanderPetkov27 avatar AlexanderPetkov27 1 Точки

въпрос относно рекурсия

Здравейте, 

дали някой ще може да ми обясни как точно се случва връщането на числата от масива отзад напред, след като вече сме достигнали base case-a. Не вдявам как точо index намалява след като достигне 5.

Благодаря предваритено

 

https://pastebin.com/Q77NDXwj

Тагове:
0
Advanced Level: Back-End
Quake3 avatar Quake3 545 Точки

Здравей,

Нали рекурсивно викаме Sum, докато индексът не стане равен на дължината на масива. След това започваме да се връщаме през всяка една извикана функция.

Ако направим нещо като диаграма, ще изглежда така:

1-ви Sum с int index = 0  (локален за метода)

.. вика 2-ри Sum с int index = 1 (локален за метода)

.....вика 3-ти Sum с int index = 2 (локален за метода)

....

Стигаме 5. и започваме да се връщаме, като първият ред, който ще се изпълни след:

var current=arr[index] + Sum(arr, index + 1);  <--- тук ни връща return 0;

ще бъде:

Console.WriteLine("after recursion + "+index);

Тъй като index не е указател (ref index), а int, то всеки отделен метод(функция) пази свой си локален index в паметта. Затова и при печат виждаме индекс 4 (за 5-тият Sum), индкес 3 за четвърия Sum, 2 за третия и т.н.

П.П. ето и един пример с и без указател като параметър

1
11/05/2018 23:07:56