求教!递归函数改写成循环!
//判断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);/*中间递归*/
}
}