为什么这个函数从不超出第一行
Why does this function never go beyond the first line?
我正在读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.
(...)
}
相关文章:
- 如何使用运算符在同一行中多次调用函数
- uncrustify:如何将多行 C 函数调用的参数组合到一行上?
- 使用更改此变量的函数在同一行中打印引用变量
- Ofstream一直给我函数的最后一行,而不是显示所有内容
- C++将函数指针放入一行的映射中
- C++ 两个函数除了一行之外执行相同的操作
- 将地址返回到 2D 数组中的一行值的函数
- 无法理解代码的特定片段:这是一个函数,只是一行还是什么
- 线程1:EXC_BAD_ACCESS错误,此错误在第一行的CPP文件中的句柄函数中出现
- 当两个函数位于一行中时,堆栈框架的样子
- 如何将具有多行代码的内联函数视为一行?
- 为什么这个函数从不超出第一行
- 无法弄清楚为什么只从文件中读取一行矩阵以及为什么我无法将 2D 数组传递给函数
- clang format函数和错误检查在同一行
- 从函数结果中分配 std::shared_ptr 的一行是什么?
- 当const在另一行处的const时,doxygen parse const成员函数不正确
- 为什么在同一行上有 2 个函数调用时跳过函数调用
- 在文件中返回一行的函数
- getline函数只读取第一行
- C++ 函数删除一行