草庐IT

递归图

全部标签

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

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

c++ - 无限循环与无限递归。两者都未定义吗?

没有副作用的无限循环是未定义的行为。参见here来自cppreference的示例.更简单的例子:intfoo(){while(true){}return42;}现在考虑几乎等同的intbar(){if(true)returnbar();return42;}这是否也会调用未定义的行为?或者换种说法:根据语言的不同,无限递归属于哪一类错误?PS:请注意,我知道运行时的含义:循环原则上可以永远运行,而递归最终将导致计算器溢出。尽管我主要对编译器对它们所做的事情感兴趣。也许是一个相当学术的问题...... 最佳答案 不,没有区别。[bas

防止递归更换元素

首先:不,这不是重复。我知道在HTML页面中搜索元素有一些可能性,但这并不是我的问题。我会概述我的问题:我的PHP代码是由于我无法在每个页面渲染时无法更改2-3次的原因。我的代码将html-content抓取特定单词,并用链接代替它们。要存档我正在使用https://github.com/sunra/php-simple-html-dom-parser.这是我的来源:foreach($dom->find('text')as$element){//$config['exclusions']isanarraylike['a','img']if(!in_array($element->parent(

c++ - 在 C++ 中以递归方式简单地打印 vector 的 STL vector

我使用了以下代码,它可以很好地打印带有printContainer()的简单std::vector。我现在想使用printContainerV2()为嵌套容器扩展它我曾尝试使用模板来确定类型是否为STL容器,但它似乎不是执行此操作的方法。#include#include#includetemplateboolisLast(Iteriter,constCont&cont){return(iter!=cont.end())&&(next(iter)==cont.end());}templatestructis_cont{staticconstboolvalue=false;};templa

c++ - 二叉树递归删除

我想了解删除二叉搜索树的递归方法是如何工作的。我在很多地方遇到的代码如下所示:voiddestroy_tree(structnode*leaf){if(leaf!=0){destroy_tree(leaf->left);destroy_tree(leaf->right);free(leaf);}}但是我不明白a)如果例程中没有返回,它是如何工作的?b)何时调用free()?我想,例如,这样一棵树:10/\614/\/\581118所以我的理解是遍历10->6->5,然后调用destroy_tree(5->left)。所以if里面的leaf是NULL,if-dependent的东西没有执

c++ - 运算符的递归应用->

据说箭头运算符是递归应用的。但是当我尝试执行以下代码时,它应该打印4却打印出乱码。classdummy{public:int*p;intoperator->(){return4;}};classscreen{public:dummy*p;screen(dummy*pp):p(pp){}dummy*operator->(){returnp;}};intmain(){dummy*d=newdummy;screens(d);coutp;deleted;} 最佳答案 Stanley所说的“递归”只是运算符应用于每个返回的对象直到返回的类型是

c++ - 具有多个递归函数调用的 C++ 中的尾递归

我正在读这个post关于尾递归。我将复制发布的解决方案:unsignedintf(unsignedinta){if(a==0){returna;}returnf(a-1);//tailrecursion}我想知道,如果结果取决于多个递归函数调用怎么办?例如:unsignedintf(unsignedinta){if(a==0){returna;}returnf(a-1)+f(a-1);}上面的代码会被编译器优化吗? 最佳答案 就目前而言,尾递归不适用。但是如果你看看secondanswer的末尾在您链接到的问题上,您可以看到如何适本

c++ - 为什么在这个递归斐波那契代码中 GCC 生成的程序比 Clang 更快?

这是我测试过的代码:#include#includeusingnamespacestd;#defineCHRONO_NOWchrono::high_resolution_clock::now()#defineCHRONO_DURATION(first,last)chrono::duration_cast>(last-first).count()intfib(intn){if(n当然,计算Fibonacci数的方法要快得多,但这是一个很好的小压力测试,侧重于递归函数调用。除了使用chrono来测量时间之外,代码没有其他内容。首先,我使用-O3优化在OSX上的Xcode中运行了几次测试(这

c++ - if 带有递归参数包的 constexpr

我正在尝试递归地运行一个类型列表,这样我就可以根据列表中的每种类型编写一些运行时代码。我希望能够在不使用“ifconstexpr”终止递归的情况下递归地遍历结构中函数(而不是结构中的函数)中的元组中的所有类型。我有一段代码显示了使用constexpr的递归。#include#include#includetemplatestructtemp{usingTypeList=std::tuple;constexprstaticstd::size_t_N=std::tuple_size::value;voidprint_this(){_inner_print();}templatevoid_i

c++ - 对主 C++ 的递归调用

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:CanmainfunctioncallitselfinC++?我发现这个问题很有趣,但有点虚幻。问题6.42C++如何编程byDietel“可以在你的系统上递归调用main吗?编写一个包含函数main的程序。包括静态局部变量count并初始化为1。每次调用main时后递增并打印count的值.编译你的程序。会发生什么?我编写了如下程序,但我在10次后停止了递归,就好像我要让它继续运行一样,它会在41000左右的值处停止。我的问题:在C++中递归调用main函数如何合法,是否应该执行此程序以堆栈溢出或内存错误等