为什么这个函数从不超出第一行

Why does this function never go beyond the first line?

本文关键字:一行 函数 为什么      更新时间:2023-10-16

我正在读Bjarne Stroustrup的书,这对我来说非常困惑(可能是因为英语不是我的第一语言(。这本书说 expression(( 永远不会超出第一行代码。表达式 (( 以调用自身开始的事实是否会导致 expression(( 无限调用自己?这是如何工作的?谢谢。

double expression()
{
    double left = expression();
    Token t = get_token();
    swich(t.kind) {
        case'+':
            return left + term();
        case'-':
            return left - term();
        default:
            return left;
    }
}

首先要理解递归函数调用,需要了解函数调用。请参阅以下简短示例:

void print() {
   std::cout << "Hello! ";
}
int main() {
   print();
   print();
}

输出将被Hello! Hello!,因为函数main调用函数print两次,程序将结束。

现在考虑如果函数print包含调用print()会发生什么,即如果它调用"自身":

void print() {
   std::cout << "Hello! ";
   print();
}

然后,输出将是一个(几乎(无穷无尽的Hello! Hello! Hello!...序列,因为 - 在打印出一个Hello!后,函数打印调用自身,并且相同的过程一次又一次地发生。

希望对您有所帮助。顺便说一句:你可能会从另一本书开始:-(

基本上这是一个无限循环,阅读 https://en.wikipedia.org/wiki/Recursion_(computer_science(https://en.wikipedia.org/wiki/Infinite_loop

double expression()
{
    double left = expression(); // <-- Each time the program reaches this line, it calls expression() again.
    (...)
}