2 gig886 gig886 于 2014.12.09 16:51 提问

C++递归改循环的问题。

函数的代码如下:

 void divconqrecurse(struct mesh *m, struct behavior *b, vertex *sortarray,
                    int vertices, int axis,
                    struct otri *farleft, struct otri *farright)
{
  struct otri innerleft, innerright;
  int divider;
  if (vertices == 2) 
  {
    //结束语句--------对farleft,farright赋值
    //用到的相关参数,sortarray,m,b;
    return;
  }
  else if (vertices == 3) 
  {
    //结束语句--------对farleft,farright赋值
    //用到的相关参数,sortarray,m,b;
    return;
  } 
  else 
  {
    divider = vertices >> 1;
    divconqrecurse(m, b, sortarray, divider, 1 - axis, farleft, &innerleft);
    divconqrecurse(m, b, &sortarray[divider], vertices - divider, 1 - axis,
                   &innerright, farright);
    mergehulls(m, b, farleft, &innerleft, &innerright, farright, axis);
  }
}

1个回答

devmiao
devmiao   Ds   Rxr 2014.12.09 18:20

能不能修改为循环的关键在于mergehulls这个函数是干嘛的,能不能调换调用顺序。将递归修改为尾递归,只有尾递归才可以转换为循环。
如果不能转换为尾递归,那么只能用堆栈模拟函数调用强行转换。

gig886
gig886 应该是不能调换顺序的,我就是用堆栈模拟来改的。但是用堆栈模拟的时候不知道参数innerleft和innerright怎么处理
3 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
循环与递归的区别
原文地址:循环与递归的区别作者:HelloWord 循环(迭代)与递归的区别   1。递归算法与迭代算法的设计思路区别在于:函数或算法是否具备收敛性,当且仅当一个算法存在预期的收敛效果时,采用递归算法才是可行的,否则,就不能使用递归算法。 当然,从理论上说,所有的递归函数都可以转换为迭代函数,反之亦然,然而代价通常都是比较高的。但从算法结构来说,递归声明的结构并不总能够转换为迭代结构,原因在于结
java之递归循环与递归
java之递归循环与递归1.程序调用自身的编程技巧称为递归( recursion)。递归做为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。
简单谈谈 C/C++ 递归的思想,实现,以及和循环的关系
很多初学者往往对递归迷惑不解,也在这上面花了不少的时间。其实教材上的例子很经典,只是它说的有一些唠叨了。初学者会看的头大的。编程是解决问题的,而现实中很多的问题都是比较简单的,没有象汉诺塔那么复杂。我们也不必追究递归到底是怎样实现的,我们只是要会用递归,会用递归来为我们解决一些问题,这就行了。         首先来看一个例子: 有一个Febonacci序列:         1,1,2,3
兔子繁殖问题采用递归和循环两种方式
兔子繁殖问题:题目描述有一只兔子,从出生后第3个月起每个月都生一只兔子,小兔子长到第三个月后每个月又生一只兔子,假如兔子都不死,问每个月的兔子总数为多少?输入描述:输入int型表示month输出描述:输出兔子总数int型基本思路:这是一个递归问题,从第一个月开始每个月兔子的数目为:1,1,2,3,5,8,13........,可以看出从第三个月开始,每个月兔子的数目是前两个月兔子的数目的和,用数学...
如何将循环转为递归函数
命令式编程向函数式编程过渡,一个问题就是不再写循环
递归转循环的通用方法
1.递归 定义:程序调用自身的编程技巧称为递归。 栈与递归的关系:递归是借助于系统栈来实现的。每次递归调用,系统都要为该次调用分配一系列的栈空间用于存放此次调用的相关信息:返回地址,局部变量等。当调用完成时,就从栈空间内释放这些单元,在该函数没有完成前,分配的这些单元将一直保存着不被释放。 2.递归转化为循环 记得有人说过“所有递归都能转化为循环”,某晚睡不着思考了一下这个问题
递归与循环的效率问题
递归与循环的效率问题 一摆案例: Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1。(0) 当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少。 要求:1s内,256M内 考点:1简单循环的效率比递归高;2.利用10007的余数巧妙避开了大数BigInter操的作(这个类的操作效率很慢)。 那么这个时候平时算法学得好的童鞋都会
递归与尾递归的循环实现
程序调用自身的行为称为递归,是函数自己调用自己。 一个函数在其定义中直接或间接调用自身的一种方法,它通常把一个大型的复杂的问题转化为一个与原问题相似的规模较小的问题来解决,可以极大的减少代码量.递归的能力在于用有限的语句来定义对象的无限集合. 递归的思想是把问题分解成为规模更小且与原问题有着相同解法的问题,那么是不是这样的问题都能用递归来解决呢?答案是否定的。并不是所有问题都能用递归来解决。那
for循环和递归算法的运行效率比较(c语言)
实验目的 在编程语言中,对比不同编程风格的代码写法,或者通过使用不同的编译器和编译优化参数,通过编译器生成汇编代码,静态分析所生成汇编代码的运行效率。    实验平台、工具 在window 7平台下,采用vc++ 6.0编译器来编写相应的C程序,然后通过UltraCompare工具来比较vc++编译程序后产生的汇编文件的异同(win-TC在win7 64位下无法正常运行)。   3、实
递归调用效率问题,递归与循环比较
1.所谓的递归慢到底是什么原因呢? 大家都知道递归的实现是通过调用函数本身,函数调用的时候,每次调用时要做地址保存,参数传递等,这是通过一个递归工作栈实现的。具体是每次调用函数本身要保存的内容包括:局部变量、形参、调用函数地址、返回值。那么,如果递归调用N次,就要分配N*局部变量、N*形参、N*调用函数地址、N*返回值。这势必是影响效率的。   2.用循环效率会比递归效率高吗? 递归与循环