Название моего вопроса может быть улучшено, если есть конкретное название, о котором я буду говорить, дайте мне знать.
Это не для конкретного языка, все те, которые я использовал, лечить функциювызовы как выражения одинаковы.
Итак, я читал о рекурсии и хвостовых вызовах, поэтому я написал этот код на C ++
#include <iostream>
using std::cout;
int test(int num) {
if (num > 0) {
return test(num - 1);
}
}
int fact(int num) {
return num == 0 ? 1 : num*fact(num - 1);
}
int main() {
cout << test(20) << '\n';
return 0;
}
Конечно, test(num)
всегда будет иметь значение 0
если num > 0
, так как базовый регистр n = 0
.
Но почему?Как язык знает, что должно быть возвращено?Откуда он знает, что test(n - 1)
должно оценивать?
Edit;
Я включил рекурсивный метод получения факториала числа.Как C ++ (или любой другой язык) узнает, на что умножить num
?