在循环中调用递归函数
Calling recursive function inside a loop
当我在循环中调用递归函数时,我遇到了两个问题。请考虑以下示例代码:
int fact(int x)
{
if(x == 1)
return 1;
return x*fact(x-1);
}
int main() {
int n = 2;
for(int i = 0; i < n; i++);
std::cout << fact(4) << std::endl; // 24 ??
return 0;
}
问题1:我对该程序的预期结果是24 24
(24
打印机的两倍),但实际结果我只得到了一个24
。
问题 2:即使我没有递归调用 main 函数,重复调用 main()
函数的原因是什么。
如果有人告诉我你关于如何在循环中调用递归函数以获得多个输出的想法,那就太好了。
for(int i=0; i < n; i++); <---------------------- notice this
std::cout << fact(4) << std::endl; // 24 ??
请注意for
循环后的;
。这就是为什么你只得到一个输出的原因。循环退出后执行std::cout
;它在循环之外。
这就是你第一个问题的答案。现在第二个问题:
重复调用main()函数的原因是什么,即使我没有递归地称为main函数。
我认为您发布的代码没有这个问题。 您必须在代码中执行尚未发布的其他操作,因此main()
被递归调用。
请注意,语言规范禁止从代码调用main()
(递归或其他方式C++。因此,如果您使用 GCC -pedantic
选项编译它,那么如果您偶然从程序中调用main()
,则它不应该编译。
相关文章:
- 如何在Elixir中调用递归函数并行
- 即使没有调用这个递归函数,它是如何工作的?
- 如何在递归函数调用中返回当前函数值
- 递归函数调用在后台工作
- 递归列表:调用析构函数的所有内容
- 如何在递归函数中调用引用数组?
- 实现递归函数,避免由 C++ 中 include 的循环调用(没有 #pragma 一次)引起的无限循环输入
- 我应该如何递归地调用带有模板的函数
- 在堆栈已满之前,在C/C 中以最大递归函数调用并给出分段故障
- 如何在不使用静态变量的情况下从递归函数中只调用另一个函数一次
- 递归函数是否可以在不将常量作为参数发送的情况下了解首次调用它的函数中的常量
- 可以valgrind报告丢失块的内存地址(用于调试递归函数调用)
- 如何使用"wrapper function"调用没有参数的递归函数 n 次?
- 当我在递归函数中调用 return 时,我的程序意外完成
- C++递归函数,调用当前深度
- 如何跟踪递归函数的调用堆栈使用情况
- 在循环中调用递归函数
- C++在递归函数中平衡了树/调用顺序
- 为什么递归函数打印正确的值,而调用后的cout语句却没有打印正确的值?
- Eclipse抱怨递归函数调用