草庐IT

递归图

全部标签

c++ - 了解递归函数中的错误?

我正在尝试编写递归函数,但在行中出现错误:n+sum(n-1);我的编译器是德语的,所以错误消息的错误翻译是:“voidvaluenotignoredassupposedto”。感谢帮助!voidsum(intn){if(n==0){cout0){n+sum(n-1);cout 最佳答案 请注意,您已将函数定义为voidsum(intn);这个函数没有返回值。但是,在这段代码中:n+sum(n-1);您正试图将n添加到sum(n-1)的返回值中,这是不合法的,因为sum(n-1)不产生值。要解决此问题,您可能需要更改函数以使其返回i

c++ - 重载 << 运算符和递归

我尝试了以下代码:#includeusingstd::cout;usingstd::ostream;classX{public:friendostream&operator当我编译并运行它时,它符合预期;一个无限循环。如果我删除友元函数中的cout语句,递归就不会发生。为什么会这样? 最佳答案 Optimizer决定您所有剩余的事件都没有效果,并将其优化掉。对与错是另一回事。特别是:Xx;创建空对象“x”cout调用:return(os追加空对象;编译器注意到自上次调用以来“os”没有增长,并且没有显示任何进一步这样做的promis

c++ - 返回递归三元怪胎

假定以下函数:intbinaryTree::findHeight(node*n){if(n==NULL){return0;}else{return1+max(findHeight(n->left),findHeight(n->right));}}用于给定二叉搜索树binaryTree的非常标准的递归treeHeight函数。现在,我正在帮助一个friend(他正在上一门算法类(class)),我遇到了这个函数的一些奇怪问题,我无法100%向他解释。max被定义为max(a,b)((a)>(b)?(a):(b))(恰好是中的max定义windef.h),递归函数异常(它运行类似n^n次,

c++递归没有明显原因退出

我使用递归编写了一个函数。在对其进行测试时,结果表明该函数在没有任何明显原因的情况下被终止,而递归仍在运行。为了测试这个,我写了一个无限递归。在我的PC上,这个函数在大约2秒后退出,最后的输出大约是327400。最后一个数字并不总是相同的。我使用UbuntuLucidLynx、GCC编译器和Eclipse作为IDE。如果有人知道问题出在哪里以及如何防止程序退出,我将非常高兴。#includevoidrek(doublex){std::cout 最佳答案 您很可能会溢出堆栈,此时您的程序将被立即终止。堆栈的深度将始终限制您可以递归的数

c++ - 为什么阶乘递归函数比普通阶乘函数效率低?

我有两个函数可以计算数字n的阶乘。我不明白为什么“正常”函数需要更少的时间来计算数字n的阶乘。这是正常的功能:doublefactorial(intn){doubles=1;while(n>1){s*=n;--n;}returns;}这是递归函数:doublefactorial(intn){if(n这应该会更省时,因为它不会创建新变量,而且它执行的操作也更少。虽然正常功能确实使用了更多的内存,但速度更快。我应该使用哪一个,为什么?PS:我使用double是因为我需要它来计算e^x的泰勒级数。 最佳答案 您写道,递归函数“应该更省时,

c++ - 编译时递归函数来计算整数的下一次幂?

关于BitTwiddlingHackswebsite提供以下算法以将整数四舍五入为下一个二的幂:unsignedintv;//computethenexthighestpowerof2of32-bitvv--;v|=v>>1;v|=v>>2;v|=v>>4;v|=v>>8;v|=v>>16;v++;我想编写一个元编程函数来计算相同的操作:递归(用于编译时执行)对于任何类型的整数(它甚至应该适用于任何大小的可能笨拙的非标准整数,例如15位、65位...)这是预期函数的形式:template::value>::type,class=typenamestd::enable_if::value

第486题 预测赢家(递归+动态规划)

题目描述:给你一个整数数组nums。玩家1和玩家2基于这个数组设计了一个游戏。玩家1和玩家2轮流进行自己的回合,玩家1先手。开始时,两个玩家的初始分值都是0。每一回合,玩家从数组的任意一端取一个数字(即,nums[0]或nums[nums.length-1]),取到的数字将会从数组中移除(数组长度减1)。玩家选中的数字将会加到他的得分上。当数组中没有剩余数字可取时,游戏结束。如果玩家1能成为赢家,返回true。如果两个玩家得分相等,同样认为玩家1是游戏的赢家,也返回true。你可以假设每个玩家的玩法都会使他的分数最大化。LevelACrateMedium59.2%题目解析(递归):两个人取数,

c++ - 如何防止递归函数中不必要的内存使用

我刚刚编写了一个递归函数,我突然意识到我在函数中使用的所有变量都将保留在内存中,直到递归中断。如果我递归多次或为后续递归函数调用中未使用的变量分配大量内存,这是否会导致大量内存使用浪费?例如下面的recurse中只用到了vec2,temp_int和temp_vec会继续无谓的占用内存。intrecurse(std::vectorarg_vec){inttemp_inti;std::vectortemp_vec;std::vectorvec2;//...dosomeprocessingwitharg_vecandtemp_vecandresultisstoredinvec2recurse

c++ - 限制 C++ 中的递归调用(大约 5000 次)?

为了了解C++中递归调用的限制,我尝试了这个函数!voidrecurse(intcount)//Eachcallgetsitsowncount{printf("%d\n",count);//Itisnotnecessarytoincrementcountsinceeachfunction's//variablesareseparate(soeachcountwillbeinitializedonegreater)recurse(count+1);}当计数等于4716时程序停止!所以限制只是4716!我有点困惑!为什么程序在计数等于4716时停止执行!PS:在Visualstudio20

c++ - 值是如何返回的? - 递归算法

我无法理解这个简单的递归算法是如何返回值的。算法如下:intfib(intn){if(n我想知道输入5到这个函数是如何返回5的?我知道第五个斐波那契数是5,所以这是正确的答案,但我不确定这个答案是如何从上面的代码中推导出来的.前五个斐波那契数:11235。根据我有限的理解,我认为将5传递给此函数将返回7。这是因为5-1=4和5-2=3。然后将这两个数字相加,我得到简单的整数7。这是否有意义?我敢肯定我已经失去了阅读这篇文章的人,尽管这很简单。如果我正在读这篇文章,我会迷路的。此外,如果我制作一个递归树并显示从5开始对fib的递归调用,我看不到这最终如何返回5,但我确实看到了对函数fib