草庐IT

递归图

全部标签

c++ - typedef函数指针递归

我试图声明一个函数,该函数采用与参数类型相同的函数。voidrec(void(*f)(void(*)(void(*)(...)))){f(f);}我最终进行了递归尝试。您始终可以从void*进行转换。voidrec(void*f){((void(*)())f)(f);}但它不是类型安全的我试图用typedef来做到这一点:typedefvoid(*RecFunc)(RecFunc);但不编译。有可能吗? 最佳答案 你不能做你想做的事。正如您所注意到的,您最终试图创建一个递归的typedef。语言不支持。

c++ - 递归互斥锁背后的想法

我在学校实验室工作,我们被指示为计数程序创建递归互斥锁。我写了一些代码(不起作用),但我认为这主要是因为我不理解使用递归互斥锁背后的真正想法。谁能详细说明递归互斥锁应该做什么/看起来像什么?一般说明:我不是要答案,只是要澄清递归互斥锁应该做什么。此外,如果有人对此感到好奇,请查看此处所需的代码。我正在编辑/实现的代码是recmutex.c。recmutex.h#include/**Therecursive_mutexstructure.*/structrecursive_mutex{pthread_cond_tcond;pthread_mutex_tmutex;//anon-recur

c++ - 如何在可变参数模板上生成递归数据结构?

我想通过这个问题掌握使用TMP的递归数据结构生成技术。问题假设我有一个可变参数模板templatestructmy_sets{};.在my_sets我想生成一个新类型,其数据成员取决于Ts.例如,我想要my_sets有一个std::setTs...中每个元素/类型的数据成员usingx_t=my_sets;x_tx;x.insert(5);//intoastd::setmemberinmy_setsx.insert('z');//intoastd::setmemberinmy_setsx.insert("foo");//intoastd::setmemberinmy_sets我认为实现

c++ - 如何准确理解函数递归?

我目前正在编写一些分而治之的算法,其中到处都使用函数递归,但我的想法非常模糊或者不知道它到底是如何工作的,这就是我将它发布在这里的原因,希望你不要介意它太基本。例如,如果我们有如下代码:#includeusingnamespacestd;voidRecursion(intn){cout0){Recursion(n-1);}cout我测试了Recursion(3),终端中的打印输出是:32100123我能理解函数递归调用的概念,但我不明白它的工作原理。例如,他们无法再次调用该函数后,他们会做什么?例如,在这里,我可以理解它从3打印到0,但为什么它又从0打印到3?我听说这是因为函数递归存储

c++ - 在递归算法中获得更快的代码

我正在学习C中的递归。我的问题是:打印80个第一个Fibonacci数(使用递归)这是本书的代码:#include#include#includelonglongf[100];longlongfib(intn){if(n0)returnf[n];f[n]=fib(n-1)+fib(n-2);returnf[n];}intmain(){inti;for(i=0;i使用这段代码,我的程序运行得非常快,我立即得到了80个斐波那契数列。但是,当我删除第10行时:if(f[n]>0)returnf[n];程序变得很慢,打印所有80个数字大约需要20秒。谁能解释为什么?谢谢。

c++ - 我应该如何在没有反复试验的情况下解决这个递归问题

intsum_down(intx){if(x>=0){x=x-1;inty=x+sum_down(x);returny+sum_down(x);}else{return1;}}参数x的最小整数值是多少,以便返回值大于1.000.000?现在我只是通过反复试验来做这件事,因为这个问题是通过纸质形式提出的。我认为我没有足够的时间进行反复试验。问题是,你们如何快速将其可视化以便轻松解决。谢谢大家,我是编程新手,所以提前致谢! 最佳答案 递归逻辑:x=x-1;inty=x+sum_down(x);returny+sum_down(x);可以

C++ 递归数据类型

有点菜鸟的问题:我需要类A和B,这样A有一个B*成员,B有一个A*成员。编译时出现“错误:ISOC++禁止声明没有类型的‘B’”。我该如何解决这个问题? 最佳答案 转发声明B(或A)classB;//forwarddeclarationofBclassA{B*b;};classB{A*a;}; 关于C++递归数据类型,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/3796631/

c++ - 二叉树中的递归函数解释

我正在学习二叉树的教程。而且我在递归函数的使用上有点卡住了。比如说我需要计算树中的节点数intcountNodes(TreeNode*root){//Countthenodesinthebinarytreetowhich//rootpoints,andreturntheanswer.if(root==NULL)return0;//Thetreeisempty.Itcontainsnonodes.else{intcount=1;//Startbycountingtheroot.count+=countNodes(root->left);//Addthenumberofnodes//int

c++ - 使用尾递归查找数组的最小元素

给定一个大小为n的整数数组a,编写一个带有原型(prototype)的尾递归函数intf(inta[],intn);找到数组的最小元素。这是我设法想出的最好的:intf(inta[],intn){staticint*min;if(min==0)min=newint(a[n-1]);elseif(*min>a[n-1])*min=a[n-1];if(n==1)return*min;elsereturnf(a,n-1);}它能变得更好吗?我不喜欢使用静态变量。 最佳答案 intf(inta[],intn){if(n==1)returna

c++ - 在 GCC 工作正常的情况下使用 Clang 时无限递归模板实例化?

以下C++代码的目的是将三元运算符(?:)包装在一个单独的函数中,稍后将有助于构建语法树。在查看真正的C++代码片段之前,让我们快速看一下它在伪代码中的作用:boolrecursive(boolv){returnv?v:recursive(v);}intmain(){boolr=recursive(true)}不幸的是,当三元运算符(?:)包含在模板函数中时,Clang会在终止递归时遇到问题:/******************DECLARATIONS******************/templateconstexprTrecursive(Tt);structIfCase{tem