C 消除递归无效函数
有人能帮我去掉这个空函数的递归吗?它在某些情况下不起作用。我已经试过了,但是我弄不到。谢谢。资料来源:C 消除递归无效函数,c,recursion,void,C,Recursion,Void,有人能帮我去掉这个空函数的递归吗?它在某些情况下不起作用。我已经试过了,但是我弄不到。谢谢。资料来源: 您所展示的函数需要某种类型的堆栈,可以使用数组实现。这是一个使用固定大小数组的示例,该数组具有一个永不溢出的assert()——这大致相当于原始递归算法,因为它本身也不存在递归过远的错误检查,但显然可以用一些更健壮的错误处理来代替它(甚至可以通过调整大小进行动态分配) void impimecamino(TipoValorVertice Origem、TipoValorVertice v、,
您所展示的函数需要某种类型的堆栈,可以使用数组实现。这是一个使用固定大小数组的示例,该数组具有一个永不溢出的
assert()
——这大致相当于原始递归算法,因为它本身也不存在递归过远的错误检查,但显然可以用一些更健壮的错误处理来代替它(甚至可以通过调整大小进行动态分配)
void impimecamino(TipoValorVertice Origem、TipoValorVertice v、,
TipoGrafo*Grafo,国际区,TipoCor*Cor,
int*Antecessor)
{
int顶点[最大顶点];
int n=0;
而(1)
{
if(Origem==v)
{
printf(“%d”,Origem);
打破
}
if(先行词[v]=-1)
{
printf(“Nao existe caminho de%d ate%d”,Origem,v);
打破
}
断言(n0)
printf(“%d”,顶点[--n]);
}
void ImprimeCaminho(TipoValorVertice Origem, TipoValorVertice v,
TipoGrafo *Grafo, int * Dist, TipoCor *Cor,
int *Antecessor)
{ if (Origem == v) { printf("%d ", Origem); return; }
if (Antecessor[v] == -1)
printf("Nao existe caminho de %d ate %d", Origem, v);
else { ImprimeCaminho(Origem,Antecessor[v],
Grafo, Dist, Cor, Antecessor);
printf("%d ", v);
}
}
void ImprimeCaminho(TipoValorVertice Origem, TipoValorVertice v,
TipoGrafo *Grafo, int * Dist, TipoCor *Cor,
int *Antecessor)
{
int Vertices[MAX_VERTEX];
int n = 0;
while (1)
{
if (Origem == v)
{
printf("%d ", Origem);
break;
}
if (Antecessor[v] == -1)
{
printf("Nao existe caminho de %d ate %d", Origem, v);
break;
}
assert(n < sizeof Vertices);
Vertices[n++] = v;
}
while (n > 0)
printf("%d ", Vertices[--n]);
}