gpt4 book ai didi

c - 当递归函数在c中达到高深度时停止递归函数

转载 作者:行者123 更新时间:2023-12-04 16:09:39 25 4
gpt4 key购买 nike

我想在递归函数达到 3000 深度时停止它。我该怎么做?

 void DFS(bool M[][COL], int row, int col) 
{
short k;

M[row][col] = 0;

for (k = 0; k < 4; k++){
if(k==0){
if (isSafe(M, row , col - 1) ){
DFS(M, row , col - 1);
}
}
if(k==1){
if (isSafe(M, row , col + 1) ){

DFS(M, row , col + 1);
}
}
if(k==2){
if (isSafe(M, row + 1, col) ){
DFS(M, row + 1, col);
}
}
if(k==3){
if (isSafe(M, row - 1 , col) ){
DFS(M, row - 1, col);
}
}
}

}

添加计数器的时候,我尝试在3000的时候返回,但我不能说我很成功。

我有 512 * 512 矩阵,我正在这个矩阵中寻找一个岛。如果岛屿的面积之一超过 10000 个单位,则递归函数会给出错误。

最佳答案

I want to stop the recursive function when it reaches 3000 depth



对此的一般解决方案是向函数添加“深度”参数,并传递 depth + 1到每个递归调用(或 remaining_depth - 1,如果你想倒数)。要从面向外部的 API 中隐藏这一点,请使公共(public)函数(不带深度参数)简单地调用具有 depth 初始值的实际函数。 .

例如:
#define MAX_DEPTH 3000

static void dfs_(bool M[][COL], int row, int col, int depth) {
if (!isSafe(M, row, col)) { return; }
M[row][col] = 0;
if (depth >= MAX_DEPTH) { return; }
dfs_(M, row, col - 1, depth + 1);
dfs_(M, row, col + 1, depth + 1);
dfs_(M, row - 1, col, depth + 1);
dfs_(M, row + 1, col, depth + 1);
}

void DFS(bool M[][COL], int row, int col) {
dfs_(M, row, col, 1);
}

关于c - 当递归函数在c中达到高深度时停止递归函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53925761/

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