Tag: recursion

如何在Bloodshed Dev-C ++中增加堆栈大小?

我们在一个图像处理项目中使用Blodshed Dev-C ++。 我们正在video帧上实现连接组件标签。 我们必须使用一个递归函数,它会多次递归,我们得到一个stackoverflow。 我们怎样才能拥有更大的堆栈大小? 是否可以通过一些链接器参数或类似的东西来改变它? void componentLabel(int i,int j,IplImage *img){ // blueFrame = img->imageData[i*3*width+j*3]; // greenFrame = img->imageData[i*3*width+j*3+1]; // redFrame = img->imageData[i*3*width+j*3+2]; if(!( img->imageData[i*3*width+j*3]==0 && img->imageData[i*3*width+j*3+1]==0 && img->imageData[i*3*width+j*3+2]==0 ) ){ //printf(“iffffff aq\n”); return; } else{ //printf(“else aq %d\n”,sayac_label); img->imageData[i*3*width+j*3]=1; new_object.pixel_count=new_object.pixel_count+1; new_object.total_row=new_object.total_row+i; new_object.total_col=new_object.total_col+j; if(j0 ){ componentLabel(i,j-1,img); } if(inew_object.bottom.satir){ new_object.bottom.satir=i; new_object.bottom.sutun=j; } componentLabel(i+1,j,img); } if(i>0 […]

C:合并 – 对具有不均匀元素数的数组进行排序

我一直在为我的程序编程类工作,我们提供了一个不能完全运行的合并排序程序。 它对具有偶数个整数的数组执行合并排序,但会抛出具有奇数个整数的分段错误。 我理解排序是如何工作的,并且因为奇数导致分段错误而导致分段错误,因为数组以某种方式被过度填充。 我也理解该解决方案将涉及测试原始数组是偶数还是奇数,然后根据这个不同地将值传递给合并函数。 尽管我对这个项目有所了解,但是我几个星期以来一直试图让这个项目正常运行,我希望有人可以给我一些建议。 在发布之前我已经做了很多寻找答案,但所有其他的例子都涉及到结构的合并排序程序,这超出了我迄今为止学到的内容。 您将在我在下面发布的代码中看到。 此外,完整的程序涉及一些其他文件,但我只包括mergesort.c文件和merge.c文件,正如我的教授所保证的那样,这是唯一需要进行任何更改的地方。 main文件工作正常,只负责填充数组并调用mergesort函数。 如果其他文件是必要的,请告诉我,我会发布它们。 我没有的唯一原因是因为我们使用的是Linux shell,而且我还没有找到一种将shell中的代码复制并粘贴到我自己的操作系统的实用方法,并且需要一段时间才能将其写出来。 提前感谢您提供的任何指示。 这是代码。 mergesort.c #include void mergesort(int key[], int n) //key is the array, n is the size of key { int j, k, m, *w; w = calloc(n, sizeof(int)); assert(w != NULL); for (k = 1; k < n; k *= 2) { […]

递归控制流程

#include void printd(int n) { if(n/10) printd(n/10); putchar(n%10+’0′); } 在上面的代码中,将n视为正整数,其值为123。 第一次,123传递给printd(第一次打印)第二次,12传递给printd(第二次打印)第三次,1传递给printd(第三次打印)和putchar打印1 然后在控制流到第二个printd之后,n的值是多少? 由于它是一个自动变量,因此一旦函数结束,它在第三次打印中的值为1,并且在第二次打印时获得值12。 如果是这样,第二次打印将再次导致第三次打印,所以…. 但该程序精美地打印123。 在函数调用期间,我对控制流和变量值的理解出错了吗? 仅供参考,该计划来自K&R 4.10部分的递归

从递归返回后,c strtok返回NULL

当我没有在我的代码中调用相同的函数时一切正常但当函数突然返回时,变量pch为NULL: void someFunction() { char * pch; char tempDependencies[100*64+100]; strcpy(tempDependencies,map[j].filesNeeded); pch = strtok(tempDependencies,”,”); while (pch != NULL) { someFunction(); <- if i comment this out it works fine pch = strtok (NULL, ","); } } 因此,例如当循环作用于字符串file2,file3,file4它正确地分割file2并将字符串修改为file2\\000file3,file4但是下一次调用pch = strtok (NULL, “,”); 将pch渲染为0x0 。 在调用递归时是否有我不知道的事情?

在c中递归地反转链表

当head作为参数发送给它时,以下代码可以正常工作。 因为我是C的新手,我无法理解它是如何工作的。 请帮帮我。 struct node *recursiveReverseLL(struct node *list) { struct node *revHead; if (list == NULL || list->link == NULL) { return list; } revHead = recursiveReverseLL(list->link); list->link->link = list; list->link = NULL; return revHead; } 我不知道如何使用这些递归调用提供链接。 即)如果链接为, 1 -> 2 -> 3 -> 4 然后hw被改变为, 4 -> 3 -> 2 -> 1