草庐IT

RECURSION

全部标签

c++ - 如何在不使用递归的情况下找到字符串的所有排列?

谁能帮我解决这个问题:这是一个查找任意长度字符串的所有排列的程序。需要相同的非递归形式。(最好是C语言实现)usingnamespacestd;stringswtch(stringtopermute,intx,inty){stringnewstring=topermute;newstring[x]=newstring[y];newstring[y]=topermute[x];//avoidstempvariablereturnnewstring;}voidpermute(stringtopermute,intplace){if(place==topermute.length()-1){

c++ - main 的递归

我读到一些地方说main()的递归在C++中是不允许的,但是当我尝试它运行时没有任何错误#includeusingnamespacestd;inti=10;intmain(){if(i==1){cout 最佳答案 显式调用main是未定义的行为,任何事情都可能发生(包括看似有效)。C++033.6.13)Thefunctionmainshallnotbeusedwithinaprogram.[...]编译器(就像所有未定义的行为一样)不需要提供诊断,运行时也不需要崩溃。 关于c++-ma

c++ - 数字在数组中出现的次数

我在一本C++书中找到了一个练习,上面写着“编写一个函数来计算一个数字在数组中出现的次数。”。一切正常,程序运行正常。但是练习还说函数应该是递归的。如何使递归函数像这样工作?#includeintcount(intnumber,intarray[],intlength){intcounter=0;for(inti=0;i 最佳答案 使用这个count函数:intcount(intnumber,intarray[],intlength){if(length==0)return0;return(number==*array)+count

c++ - 我可以在这里避免模板递归吗?

我为元组写了一个for_each:templateenable_if_t::valuefor_each(Tuple&,F&&){}template::value>enable_if_t::value>=end>for_each(Tuple&t,F&&f){f(get(t));for_each(t,forward(f));}[LiveExample]但是Yakk'sanswertothisquestion给出了一个很好的例子,说明如何处理在所有tuple值上运行lambda非递归:namespacedetail{templatevoidfor_each_arg(F&&f,Args&&..

c++ - 递归和预递减运算符

我有这个功能:voidm(intn){if(n>0)m(--n);coutoutputis:001234}我无法理解它的工作原理。例如:n(输入)=5输出:001234我的问题是:为什么两次显示零?当我像这样添加括号时:voidm(intn){if(n>0){m(--n);cout那么,这段代码中的什么括号导致“0”只存在一次?当我将预递减(--n)更改为后递减(n--)时,它什么也没显示。为什么?有人可以帮助我了解它是如何工作的吗? 最佳答案 首先要注意的是:在C++中,如果您不在if之后放置括号声明,只有下一行会出现在声明中。示

c++ - 如何用模板参数包的内容填充数组?

在我发现itwasnotstandards-compliant之前,我嵌套了与VS2015一起使用的部分专用模板代码。.我希望它是这样的,所以我扭曲了我的代码来克服前一个问题以及thatone现在碰壁了。使用可变参数模板和部分特化,我想在编译时给定一组固定参数来填充一个数组。我想要实现的目标似乎也类似于thisanswer但我没能成功。考虑以下程序:#includetemplatestructArray;templatestructArrayFiller{inlinestaticvoidfill(Array&a,constArgs&...args){ArrayFiller::fill_

c++ - 禁止 GLSL 中的递归?

我在尝试编写以下递归调用时遇到了这个错误。我看过很多GLSL递归光线追踪实现的演示,所以我假设GLSL支持递归。不是这样吗?OpenGL正在返回一条编译时错误消息:Error:Functiontrace(vec3,vec3,vec3,int)hasstaticrecursion这是我的函数定义:vec3trace(vec3origin,vec3direction,vec3illum,intorder){floatdist;ints_index=getSphereIntersect(origin,direction,dist);//iflighthitfloatlight_dist=20

c++ - 这个递归函数是如何自动转化为迭代函数的呢?

我正在阅读下面的尾递归Tailrecursionreferstoarecursivecallatthelastline.Tailrecursioncanbemechanicallyeliminatedbyenclosingthebodyinawhileloopandreplacingtherecursivecallwithoneassignmentperfunctionargument.例如voidprint(Iteratorstart,Iteratorend,ostream&out=cout){if(start==end)return;out通过上述规范转换为迭代voidprint(

c++ - 什么时候返回递归函数?

我有一个关于return和递归函数的问题。这又是基于我目前正在研究的二叉树。代码是voidTree::display(){if(!root_)return;display_r(root_);}voidTree::display_r(Tree*node){if(0==node)return;display_r(node->left_);std::coutvalue_right_);}这是工作代码。编译和运行没有失败,从最小到最大打印数字。然而,过去并非如此。上面的代码是先用写的returndisplay_r(node->left_);std::coutvalue_right_);这没有用

c++ - G++ 编译器不允许递归?

我创建了一个使用递归的非常简单的程序。我正在使用g++编译器。我可以编译它,但是当我尝试运行它时,我收到一条错误消息,指出SEGMENTATIONFAULT。这是我的代码:#includeusingnamespacestd;intRecurse(int);intmain(intargc,char*argv[]){Recurse(10);cout 最佳答案 在递归调用中,您使用的是后缀--(numTimes--),而不是前缀版本(--numTimes)。结果,numTimes的值在递归调用后递减。这意味着Recurse被10无限调用。