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]);
}