【问题标题】:2-Dimensional Recursion二维递归
【发布时间】:2012-11-19 17:13:33
【问题描述】:

我正在为一个类实现一个二维数据结构。我想要的方法是一个“NxN”对象数组。

所以,

    Cell[][] dataStructure = new Cell[N][N];

我目前的问题是我对递归非常生疏。每个单元格都依赖于它左边的单元格的输出,以及它上面的单元格的输出来创建它的输出。

例子:

假设标准 X、Y 方向,我希望能够调用 单元格的 getOutputX 方法,Cell[X][Y],它将递归 调用 Cell[X-1][Y] 的 getOutputX 和 Cell[X][Y-1] 的 getOutputY 直到 它到达数组的边缘。此时,输出将 通过数组传播回来并返回所需的输出 细胞。

当我写下这篇文章时,我理解的越多,我觉得我很接近了。任何有用的输入或提示将不胜感激。

我的具体问题是如何创建一个 getOutput 方法,该方法将从上面的单元格和所需输出左侧的单元格中获取所需的输入。

【问题讨论】:

  • 你可以做一个嵌套循环。 (X-1,Y) 和 (X,Y-1) 的值将在处理 (X,Y) 时可用
  • 哇,我想我只是伤到了我的大脑......但我喜欢你的评论 nhadtdh,它让大脑有点舒缓。
  • 你想做什么?从图像上看,您似乎正试图从给定位置“回溯”并聚合所有向其汇聚的单元格(跨所有路径)。观察: - 给定的单元格将被“输入”到左侧的单元格或上方的单元格 - (反之亦然)给定位置的唯一“可导航”单元格是右侧的直接邻居,并且下面
  • 您需要决定三件事:左边缘的单元格的输出是什么(因此没有左邻居),上边缘的单元格的输出是什么(因此没有顶部邻居),并且给定左侧和单元格的邻居的输出,单元格的输出是什么(即如何将邻居输出与单元格组合以获得单元格的输出。一旦你定义了这个,只需 10 行代码。
  • @JB Nizet 顶部和左侧边缘的单元格是硬编码输入,我将省略细节,但它们将用于测试每个可能的二进制输入组合。给定所需的输出,然后将它们运行通过两个不同的逻辑门。 x 方向一个逻辑门,y 方向一个逻辑门。

标签: java data-structures recursion


【解决方案1】:

算法很简单:

int getOutput(x, y) {
    if (x == 0 || y == 0) {
        return hardCodedInput(x, y);
    }
    int leftOutput = getOutput(x - 1, y);
    int topOutput = getOutput(x, y - 1);
    return logicGate(x, y).applyLogic(leftOutput, topOutput);
}

【讨论】:

  • 非常感谢,我会试一试的!
  • 看来这行得通,再次感谢!现在,如果我能弄清楚我设法包含的故障导致答案出现错误^-^
猜你喜欢
  • 1970-01-01
  • 2014-02-17
  • 1970-01-01
  • 2013-01-01
  • 2019-07-27
  • 1970-01-01
  • 1970-01-01
  • 2017-08-05
相关资源
最近更新 更多