草庐IT

递归图

全部标签

c++ - 为什么这个递归 C++ 函数有如此糟糕的缓存行为?

设T是一棵有根二叉树,每个内部节点恰好有两个子节点。树的节点将存储在一个数组中,让我们按照预定布局将其称为TreeArray。例如,如果这是我们拥有的树:然后TreeArray将包含以下节点对象:7、3、1、0、2、6、12、9、8、11、13这棵树中的一个节点是这种结构:structtree_node{intid;//idofthenode,randomlygeneratedintnumChildren;//numberofchildren,itis2butfortheleafsit's0intpos;//positioninTreeArraywherethenodeisstored

c++ - 递归调用可变参数模板函数重载时调用不明确

这个问题在这里已经有了答案:Functionoverloading:emptyparameterlistvsparameterpack(1个回答)关闭5个月前。考虑这段代码:templatevoidfoo(){}templatevoidfoo(){foo();}intmain(){foo();return0;}由于模棱两可的调用而无法编译foo();什么时候RestOfArgs只有一个元素({int})。但是编译没有错误:templatevoidfoo(FirstArgx){}templatevoidfoo(FirstArgx,RestOfArgs...y){foo(y...);}in

c++ - 如果递归函数定义为内联会发生什么?

这个问题在这里已经有了答案:关闭11年前。PossibleDuplicate:Canarecursivefunctionbeinline?我认为定义为内联的递归函数不会有任何效果,根本不会成为内联。因为,编译器不知道要复制多少层内联函数的代码。有什么想法吗?

c++ - 在 boost::spirit::qi 语法中处理深度递归的正确方法是什么?

我有一个类似于以下的工作语法:stock_price=symbol_>>date_>>price_;stock_prices_=stock_price_>>stock_prices_|eps;grammar_=lit("PRICES")>>stock_prices_>>lit("END");问题是,当股票价格列表太高时(比如大约1000个价格),系统会使用exc_bad_access解析段错误。我实际上可以通过以下方式解决这个问题:stock_prices_=stock_price_>>stock_price_>>stock_price_>>stock_price>>stock_pri

c++ - 如何使用 TBB 多线程 "tail call"递归

我正在尝试使用tbb对现有的递归算法进行多线程处理。单线程版本使用尾调用递归,从结构上看是这样的:voidmy_func(){my_recusive_func(0);}booldoSomeWork(inti,int&a,int&b,int&c){//dosomework}voidmy_recusive_func(inti){inta,b,c;boolnotDone=doSomeWork(i,a,b,c);if(notDone){my_recusive_func(a);my_recusive_func(b);my_recusive_func(c);}}我是一个tbb新手,所以我第一次尝试

c++ - 递归可变函数模板

我想编写一个类方法,它采用模板参数包,但参数为零,并“迭代”类型:structBar{templatevoidfoo(){//somethingwithTthatinvolvesBar'smembersfoo();}};实现它的首选方法是什么? 最佳答案 您可以使用以下内容:structBar{templatevoidfoo(){intdummy[]={0/*ManagecasewhereTsisempty*/,(bar(),void()/*Toavoidoverload`operator,`*/,0)...};(void)dumm

c++ - 如何提高该模式所需的模板递归深度?

我一直在我的代码中使用这个SO问题中描述的模式来制作各种编译时注册列表:C++typeregistrationatcompiletimetrick例如,如果你有一堆lua回调函数并且你不想忘记将它们注册到某个lua状态,你可以使用一个宏来声明它们,该宏将知道它们的名称和函数指针的模板类型放入一个列表,然后你有一个单行代码,它注册了所有的功能。此技术的局限性(如SO答案中所述)是,如果您有n列表中的项目,它需要模板递归深度O(n)评估。这并不理想,实际上我已经有不少lua回调函数了......我曾相信O(n)由于各种原因,递归深度是不可避免的,但是正如我最近在这个(未发布的)答案中从Ya

c++ - 具有两次递归调用的算法的复杂性

我有一个比被递归调用2次更奇怪的算法。这是intalg(intn)loopbody=Θ(3n+1)alg(n-1);alg(n-2)不知何故,我需要找到这个算法的复杂性。我试图通过使用上述方程的特征多项式来找到它,但结果系统太难求解,所以我想知道是否还有其他直接的方法.. 最佳答案 复杂性:alg(n)=Θ(φ^n)其中φ=黄金比例=(1+sqrt(5))/2起初我无法正式证明它,但经过一夜的工作,我找到了我遗漏的部分-替换方法减法低阶术语。对不起,我的证明表达不好(∵英语不好)。令循环体=Θ(3n+1)≦tn假设(猜测)cφ^n≤

c++ - Variadic 模板递归返回类型推导编译错误

为什么下面的代码不能编译?templateTsum(Tt){returnt;}templateautosum(Tt,U...u)->decltype(t+sum(u...)){returnt+sum(u...);}intmain(){sum(1,1.5,2);}编译错误:error:nomatchingfunctionforcallto‘sum(int,double,int)’sum(1,1.5,2);实现此功能的良好解决方法是什么? 最佳答案 这里我们将工作转发给辅助类型:namespacedetails{templatestru

kotlin - 是否可以在 Kotlin 中创建递归函数类型?

我有代表流程中步骤的函数。每个函数也知道下一步,如果有的话。我希望能够做类似的事情:funfooStep():Step?{...dosomething...return::barStep//thenextstepisbarStep}这些函数是从一个中央调度函数调用的,其中包含的代码有点像这样:varstep=startStepwhile(step!=null){step=step()}请注意,特定步骤中的逻辑也决定了下一步,如果有的话。我想我可以将Step定义为:typealiasStep=()->Step?所以Step是一个返回另一个Step或null的函数。但是,这无法编译:Kot