В хвостовых вызовах, как языки программирования узнают, что оценивает вызов функции? - PullRequest
0 голосов
/ 01 июля 2019

Название моего вопроса может быть улучшено, если есть конкретное название, о котором я буду говорить, дайте мне знать.

Это не для конкретного языка, все те, которые я использовал, лечить функциювызовы как выражения одинаковы.

Итак, я читал о рекурсии и хвостовых вызовах, поэтому я написал этот код на 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?

...