每个递归函数都可以转换为迭代吗?递归函数应该具有什么特征才能使用迭代来实现?
我一直在尝试使用迭代定义以下函数,但似乎不行!它应该探索迷宫中的所有路径(节点)。任何人都可以使用迭代重写它吗?如果不可能,为什么不呢?
typedef int[0,99] id_t;
bool visited[id_t];
int path[id_t];
int pathCounter = 0;
struct {
id_t id;
bool free;
int neighborNode[4];
} nodeMap[id_t];
void findPath(int current){
visited[current] = true;
for (i : int[0, 3]){
if(nodeMap[nodeMap[current].neighborNode[i]].free == true && visited[nodeMap[current].neighborNode[i]] == false && nodeMap[current].neighborNode[i] != -1){
path[pathCounter] = nodeMap[nodeMap[current].neighborNode[i]].id;
pathCounter++;
findPath(nodeMap[current].neighborNode[i]);
path[pathCounter] = nodeMap[current].id;
pathCounter++;
}
}
path[0] = current;
}
扩展:是否可以在不实现我自己的堆栈的情况下将提到的递归函数转换为迭代?其中一个答案表明,每个尾递归函数都可以在不使用堆栈结构的情况下转换为迭代......如果是这样,每个递归函数都可以转换为尾递归吗?如何?