求教!递归函数改写成循环!

mylove05251 2011-08-24 03:55:29
//判断curSegIndex能不能走到endSegIndex?
//求教,怎么把递归改写成循环语句,自己试了好久,都不太成功
#include <stdio.h>
#include <windows.h>
#include <time.h>

#include "_TDB_STRUCT.h"
#include "ReadTable.h"
#include "PositionCheck.h"

#define LAYOUT_END_OF_CHAINING 0 /*里程端点*/
#define LAYOUT_CONV_POINTS_NORMAL 1 /*NORMAL交汇点*/
#define LAYOUT_CONV_POINTS_REVERSE 2 /*REVERSE交汇点*/
#define LAYOUT_DIV_POINTS_NORMAL 3 /*分岔点*/
#define LAYOUT_SEGMENT 4 /*分区*/
#define LAYOUT_CROSSING 5 /*岔心*/


#define NORMAL 1
#define REVERSE 2

/*函数声明*/
void findEndSegIndexBack(int curSegIndex,int endSegIndex);/*判断 endSegIndex是否在 curSegIndex的右边,*********注:findbool在调用 findEndSegId 函数前被初始化为-1*/
void main();

/*变量定义*/
struct PointElement
{
char PointIndex[10];//point id;
int position;//1 represents normal, 2 represents reverse

}pointArray[10] = {
{"D0101",1},
{"D0102",1},
{"D0103",1},
{"D0104",1},
{"D0105",1},
{"D0106",2},
{"D0107",1},
{"D0109",1},
{"",1},
{"",1}
};
int endSegIndex;
int curSegIndex;
int findbool = -1;//-1 没有,1 有 findEndSegId 判断 endSegId是否在 curSegId的前面


void main()
{
main2();
endSegIndex = 16;/*右*/
curSegIndex = 3;/*左*/
findbool = -1;
findEndSegIndexBack(curSegIndex,endSegIndex);
printf("findbool = %d\n",findbool);
getchar();
}


/**************************************
判断 endSegIndex是否在 curSegIndex的右边

注:findbool在调用 findEndSegId 函数前被初始化为-1
**************************************/
int findI;

void findEndSegIndexBack(int curSegIndex,int endSegIndex)
{
int normalSegIndex;
int reverseSegIndex;

if(curSegIndex < 0 || endSegIndex < 0)
{
return;
}

if(curSegIndex == endSegIndex)
{
findbool = 1;
}

findI = curSegIndex;

normalSegIndex = segmentLayouts[findI].NormalNeighbourEndID;
//if(normalSegId == endSegId)
if(-1 != normalSegIndex && normalSegIndex == endSegIndex)
{
findbool = 1;
}

reverseSegIndex = segmentLayouts[findI].ReverseNeighbourEndID;
//if(reverseSegId == endSegId)
if(-1 !=reverseSegIndex && reverseSegIndex == endSegIndex)
{
findbool = 1;
}

if(-1 != normalSegIndex)
{
findEndSegIndexBack(normalSegIndex,endSegIndex); /*中间递归*/
}

if(-1 !=reverseSegIndex)
{
findEndSegIndexBack(reverseSegIndex,endSegIndex);/*中间递归*/
}


}


...全文
214 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
天亮后说晚安 2011-08-27
  • 打赏
  • 举报
回复
没有结束条件
luohuijun619 2011-08-27
  • 打赏
  • 举报
回复
lz没有判断结束条件,没有结束条件
luciferisnotsatan 2011-08-27
  • 打赏
  • 举报
回复
尾递归很容易改成循环。和 do{...}while()看上去很像。
AlanBruce 2011-08-27
  • 打赏
  • 举报
回复
mARK
AlanBruce 2011-08-24
  • 打赏
  • 举报
回复
Mark!

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧