java - 递归的正确使用

标签 java recursion

我只是想知道我对递归的使用是否正确。该代码符合预期目的;但是,我不确定它是否真的在进行递归。我尝试过跟踪我的程序,但我不明白为什么我的输出是正确的。基本上,该程序接受一个由空格和“*” Blob 组成的数据文件,并且我的程序应该递归地计算给定空格和 Blob 数组中特定行和列的 Blob 数量。问题是,我不确定为什么当我使用北、南、东、西等变量时,它能够成功地将值返回给我,因为似乎在递归过程中,每个变量都存在于该调用中。另外,我不确定为什么 North = count(row,col+1) 会给出北的值,因为每次我迭代计数的递归时,它似乎并没有停止在北的确定值,因为就像它似乎没有停下来并说返回 1 作为北。

 public static int count(int row, int col) {
  int north = 0, south = 0, east = 0, west = 0;
  if (map[row][col] == BLOB) {
     map[row][col] = MARKED;
     if (map[row][col+1] == BLOB) {
        north = count(row,col+1);
     }
     //Go South
     if (map[row][col-1] == BLOB) {
        south = count(row, col-1);
     }
     //Go East
     if (map[row+1][col] == BLOB) {
        east = count(row+1, col);
     }
     //Go West
     if (map[row-1][col] == BLOB) {
        west = count(row-1, col);
     }
     return (1 + north + south + east + west);
  }
  return 0;

最佳答案

递归只是让一个方法调用它的自身。因此,这就是递归。

您是正确的,每个变量仅存在于每个调用的范围内。然而,它们是根据其他递归调用来定义的。

这段代码似乎正在尝试填充一个数组(最终情况是当数组的一部分被填充时)。这就是为什么它似乎不会停止调用自身(因为在满足最终情况之前需要进行多次递归调用)。

关于java - 递归的正确使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58404010/

相关文章:

java - 如何使用 log4j 配置制作 Guice 日志

java - 为什么 java += 得到错误的结果,我该如何防止呢?

c++ - 递归地从双向链表 C++ 中删除偶数项

javascript shift() 奇怪的递归与返回

c - 仅使用 1 次递归调用的斐波那契数列 C

java - 如何让 else block 在 for 循环中只执行一次

java - 执行set命令时不显示环境变量

java - 如何让 Runtime.exec() "take over"调用控制台的应用程序直到完成?

kotlin - kotlin 中这些 tailrec 函数有什么不同

java - 递归和文本文件的问题