c++ 递归调用最多几层?

今天用递归写一道题目,感觉思路还可以,可就是没结果,可能是递归调用的太多,超出了visual c++6.0的限制。
那么在visual c++6.0里 递归调用最多几层?

第1个回答  2010-07-31
理论上来说是无限层,但由于内存有限,所以太多层会造成内存溢出甚至死机
visual c++6.0对层数是没有限制的
你看看是不是哪里写了个死循环,或者递归调用无法返回了?再或者就是你的算法非常复杂,你等的时间不够长?我就编写过这样的,看上去是死机,但10秒后算出来了……
第2个回答  2010-07-31
堆栈用完 编译器分给程序的堆栈空间为1mb
第3个回答  2010-07-31
#include<stdio.h>
void get(int i,FILE *file)
{
fprintf(file,"%d\n",i);
i++;
get(i,file);
}
main()
{
FILE *file;
int i=1;
file=fopen("x.txt","w+");
get(i,file);
fclose(file);
}
这是我用来研究你的问题的函数,实验出来可以递归10726次,第10726次的时候出现错误了,这应该和电脑内存有关系的,你可以自己试试看,方法就是运行程序以后在运行的文件夹里面寻找x.txt这个文件,看看最后那个数字是多少,也就是有多少次递归本回答被提问者采纳
第4个回答  2010-07-31
最好是用3~4层,太多对程序的简洁性不好,也容易犯错
第5个回答  2010-07-31
可能你弄了个死循环

C++ 递归能够进行多少次呢?
递归具体次数没有限制,限制的是函数栈容量(win32默认是2M,可以在程序链接或创建线程的时候指定更大的值),每次进入深一层的递归,函数的状态信息以及函数内部的局部变量都会压入栈里面。栈总大小是一定的,递归太深会导致栈溢出。函数的参数和局部变量越多,每次压入栈的数据就越多,最多递归层数也...

C\/C++中递归的定义和调用(如何使用递归)
递归并非总是简单地一层层调用,它可能涉及多个逻辑步骤。例如,在阶乘的递归实现中,我们通过递归求解f(n) = n * f(n-1),直到n=1时结束递归。对于斐波那契数列和汉诺塔问题,递归同样通过将大问题分解为更小的子问题来求解,然后递归调用自身直到满足条件。理解递归的关键在于,我们不需要详细了解每...

C++中的递归调用-3到3的循环调用求大神提示,谢谢。实在不解n和x的关 ...
return 1.0;你没发现你这个语法就是错的么 怎么能实现呢···

C++用函数递归求1+2+到n的问题
} 其实递归调用是这样的。如n=3,第一次调用sum(n),n>=1 所以执行return n+sum(n-1),在函数返回之前,先会计算sum(n-1)……最后sum(0)=0,然后再一层一层的返回。最后会返回5了。

C++给个求栈最大内存的程序
栈区内存,由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。访问顺序遵循先进后出原则。栈stack:是程序启动时候由程序留出的工作内存区 比如程序的局部变量,函数调用等都是从栈中获取,这个内存在需要的时候分配,不需要就释放 堆heap:是计算机空余的物理...

求第七题解答方法,c++ 问题是程序输出的第一,二,三行分别是?
第三层递归调用时,传进来的a=2, 全局::a=10+2=12,局部a先递减为1,经过if判断满足条件,输出全局::a即12;然后返回第二层递归执行 ::a+=a;此时第二层的a=3,所以:a=12+3=15,输出全局::a即15;然后返回第一层递归执行 ::a+=a;此时第二层的a=5,所以:a=15+5=20,输出全局::a即...

Java递归调用的问题,调用10000次的代码会报错
很简单。函数调用,参数保存在当前线程的栈Stack中,而不是保存在堆Heap中。一般来说Java虚拟机默认的Heap大小是128M,用来存放new的对象。但是对于每一个线程,默认的栈大小只有512KB。所以,Java不能支持过多层次的递归调用。要让这段程序可以运行,可以加上参数 Java -Xss32m digui1 来设置线程的...

递归|深度优先搜索解迷宫(C++)
Recursive Case(递归情况):检查周围可移动点,将它们加入visitedPoint,然后递归调用solveMazeHelper函数。递归过程中,visitedPoint作为引用传递以避免频繁拷贝导致的性能损失。如果找到解决方案,函数会返回路径。然而,如果搜索失败,需要在返回false时从visitedPoint中移除新加入的元素,以保持路径的准确性。算...

咱把递归算法的时间复杂度和空间复杂度讲清楚!
也就是说每一层递归都是公用一块数组地址空间的,所以每次递归的时间复杂度是常数即:O(1)。再来看递归的深度,二分查找的递归深度是logn,递归深度就是调用栈的长度,那么这段代码的空间复杂度为1 * logn = O(logn)。大家要注意自己所用的语言在传递函数参数时,是拷贝整个数值还是拷贝地址,如果...

求解C\/C++一个字符串的递归全排列的问题
Perm (list, k+1, m); \/\/ 递归调用,直至一个全排列完成,即k等于m. Swap (list [k], list [i]); \/\/ 将第一个Swap所换过的元素进行还原,防止遗漏和重复. \/\/ 如果你懂得河内塔(汉诺塔)递归的整个内部执行过程,那么这个全排列的递归(包括组合数的递归)就很简单了。

相似回答