草庐IT

RECURSION

全部标签

c++ - 递归生成给定子集大小的所有组合 (C++)

观察下面的代码:#include#include#includetemplatevoidprint_2d_vector(std::vector>&v){for(inti=0;istructpermcomb2{std::vector>end_set;std::vector*data;permcomb2(std::vector¶m):data(¶m){}voidhelpfunc(std::vector&seen,intdepth){if(depth==0){end_set.push_back(seen);}else{for(inti=0;istd::vector>permt

c++ - 有没有办法在递归中使用指针来查找数组的最小值?

首先,我是一个初学者,所以如果这个问题看起来有点愚蠢,我提前道歉。我确实知道一种使用递归来查找数组中最小值的方法,如下所示。intfindMinRec(intA[],intn){if(n==1)returnA[0];returnmin(A[n-1],findMinRec(A,n-1));}但是,我正在尝试找出一种使用递归和指针的方法。像这样:constint*min(constintarr[],intarrSize){有没有简单的方法可以做到这一点?我尝试以标准方式重新设计,但我似乎无法弄清楚如何使用指针来完成此操作。 最佳答案 您

c++ - 使用递归反转链表

我希望能够编写一个递归函数来反转链表。假设所有元素都已附加到列表中。我想把head->next->next赋值给head,所以node->next的下一个节点就是节点本身。然后,当递归完成时,将链表的头(this->head)分配给最终节点(head)。还缺少的是将最后一个节点的next分配给NULL。这样的东西在任何世界都行得通吗?它给出了运行时/段错误。structnode{intdata;node*next;};classLinkedList{node*head=nullptr;public:node*reverse(node*head){if(head->next!=nullp

c++ - 从元组函数一次存储 2 个变量

我有一个元组函数,它返回一个形式为的元组有没有一种方法可以在不创建另一个元组的情况下一次存储2个值。我知道我们可以做到n,score=tuplefunct(abc);在python中。但是如果我想在C++中存储两个返回值而不创建另一个元组,我需要调用两次n=get(tuplefunct(abc);score=get(tuplefunct(abc));在C++中是否有任何替代方法来一次存储值。 最佳答案 您不需要调用该函数两次(请注意,不涉及“另一个元组”,该函数返回一个,这就是您使用的):autox=tuplefunct(abc);

c++ - 实现功能的麻烦(递归)

该程序的目标是枚举一个人通过地铁系统从A站到L站的所有可能路径,而无需多次越过轨道。正如讲师告诉我们的那样,我知道有640条可能的路径,我们使用邻接矩阵将此程序编写为C中的早期作业。现在的目标是做同样的事情,即枚举所有可能的路线并打印出每条路线,除了这次使用类(具体为3个:地铁系统、车站和轨道)而不使用矩阵。这是地铁系统本身的示意图。我和我的助教讨论了这个项目以及如何处理它。他给了我一些想法,例如使用数组来表示车站和轨道,我决定使用我在帖子底部的整个代码中展示的方法。让我向您展示我的代码中我一直无法解决的问题区域(递归对我来说是新事物)。voidSubwaySystem::Search

c++ - 在递归函数c++中保持原始值

我正在尝试以递归方式求解平方根。我不想用代码来解决这个问题!我快完成了,但我不知道如何保持函数的原始值:floatraizCuadrada(floatnum,floaterr){floatnuevo=num/2;floatresta=(nuevo*nuevo)-num;if(resta>err){return(raizCuadrada(nuevo,err));}elseif(resta我基本上想知道如何在某个地方“保存”第一个“num”调用,以便始终在“resta”中使用它,“-num”应该始终是第一个放置的数字。注意:我无法输入更多信息。我只能输入1个数字和错误。

c++ - 如果没有递归光线跟踪,反射和折射是不可能的吗?

我正在使用GLSL计算着色器编写基于GPU的实时光线跟踪渲染器。到目前为止,它确实工作得很好,但是当涉及同时具有反射和折射时,我偶然发现了一个看似无法解决的问题。我的逻辑告诉我,为了在一个物体(如玻璃)上产生反射和折射,射线必须分成两束,一束射线从表面反射,另一束射线穿过该表面。这些光线的最终颜色然后将基于某些功能进行组合,并最终用作光线所源自的像素的颜色。我的问题是我无法在着色器代码中拆分光线,因为我必须使用递归来做到这一点。根据我的理解,着色器中的函数不能递归,因为由于与旧GPU硬件的兼容性问题,所有GLSL函数都类似于C++中的内联函数。是否可以在着色器代码中模拟或伪造递归,或者

c++ - 为什么这个递归算法对输入 2,147,483,647 给出错误答案?

我正在研究以下问题:Givenapositiveintegernandyoucandooperationsasfollow:Ifniseven,replacenwithn/2.Ifnisodd,youcanreplacenwitheithern+1orn-1.Whatistheminimumnumberofreplacementsneededforntobecome1?这是我想出的代码:classSolution{private:unordered_mapcount_num;public:intintegerReplacement(intn){count_num[1]=0;count_

c++ - 只能由函数本身写入的函数参数 - 递归计数器

所以我正在尝试编写一个递归函数来跟踪它被调用的频率。由于它的递归性质,我将无法在其中定义迭代器(或者也许可以通过指针来定义它?),因为每当函数被调用时它都会被重新定义。所以我想我可以使用函数本身的参数:intcountRecursive(intcancelCondition,intcounter=0){if(cancelCondition>0){returncountRecursive(--cancelCondition,++counter);}else{returncounter;}}现在我面临的问题是,函数的调用者可以写入counter,我想避免这种情况。话又说回来,将counte

c++ - 我想通过使用模板元编程从变量 args 中剥离参数

我是模板元编程的新手。我想从C++中的变量参数中剥离args。我正在制作一个函数,它将push_back()元素添加到任何类型的容器中。在C++17中很容易做到,但我想为C++11提供支持。请在下面找到我正在寻找的push_back()函数实现的代码。请避免使用va_start()、va_end()c风格的解决方案。#include#includetemplatevoidpush_back(Container&con,Ttail,Args...args);templateTget_tail(Tdata){returndata;}templateTget_tail(T&tail,Args