gpt4 book ai didi

c - 删除递归 void 函数

转载 作者:行者123 更新时间:2023-11-30 15:42:21 26 4
gpt4 key购买 nike

有人可以帮我删除这个 void 函数的递归吗?在某些情况下它不起作用。我已经尝试过,但我无法获得。谢谢。来源:http://www2.dcc.ufmg.br/livros/algoritmos/implementacoes-07.php

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

最佳答案

您展示的函数需要某种类型的堆栈,您可以使用数组来实现。这是一个使用固定大小数组的示例,带有永远不会溢出的 assert() - 这大致相当于原始的递归算法,因为本质上也没有对递归进行错误检查两者都不是,但您显然可以用一些更强大的错误处理(甚至是调整大小的动态分配)来替换它。

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

关于c - 删除递归 void 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20184727/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com