почему это код работает так:
Я запускаю код, и как аргумент функции Points использую число 10, в ответ я получаю число 55.
Там у метода Points есть код
"return levels + Points(levels - 1);", разве в таком случае я не должен получить ответ 19?

Метод Points обозначим как P.
P(10) = 10 + P(9) = 10 + 9 + P(8) = 10 + 9 + 8 + P(7) = … =
= 10 + 9 + 8 + 7 + 6 + 5 + 4 + 3 + P(2) =
= 10 + 9 + 8 + 7 + 6 + 5 + 4 + 3 + 2 + P(1) =
= 10 + 9 + 8 + 7 + 6 + 5 + 4 + 3 + 2 + 1 = 55
Но если взять аргумент 0 или меньше, то рекурсия улетит в минус и будет считаться очень долго, пока аргумент не выйдет за нижний предел типа int (а это около минус двух миллиардов):
P(0) = 0 + P(−1) = 0 − 1 + P(−2) = 0 − 1 − 2 + P(−3) = …
нет, рекурсивная функция же, 19 будет при первом вызове внутри функции points.
получается так:
10 + 10-1 (19)
10 + 9-1 (27)
10 + 8-1 (34)
10 + 7-1 (40)
10 + 6-1 (45)
10 + 5-1 (49)
10 + 4-1 (52)
10 + 3-1 (54)
10 + 2-1, (55) здесь уже срабатывает if(leves == 1) return 1; и рекурсия кончается, в итоге и получается 55
if (levels == 1)
return levels;
То разве нам возвращена не должна быть цифра 1, почему она прибавляется к другим числам которые были в цикле?
Функцией Points(2) возвращает 2 + Points(1), или 2 + 1, или 3.
Функцией Points(3) возвращает 3 + Points(2), или 3 + 3, или 6.
И так далее. Это десять разных вызовов и десять разных возвратов.