【问题标题】:Finding minimum element in array using recursion使用递归查找数组中的最小元素
【发布时间】:2020-10-28 14:13:45
【问题描述】:

所以我很难理解这段代码的递归是如何工作的。

int minimum(int array[], int size) {
    if (size == 1) {
        return array[0];
    }
    else {
        return (array[size] < int min = minimum(array, size - 1))? array[size] : min;
    }
}

int array[4] = {5, 99, 205, 1};
int smallest = minimum(array, 3); // 3 = index of the last element 

这是我看到的解释:这个函数使用递归搜索 int 数组中的最小值。首先,它通过检查大小是否等于 1 来检查数组中有多少元素,然后返回第一个值作为结果。如果表大于 1(从技术上讲,也小于 1),它会将数组中的最后一个值与递归调用与数组的其余部分进行比较。

递归在 0 索引处停止,然后将该值与索引 1 进行比较。然后将索引 0 和 1 的最小值与索引 3 中的值进行比较,依此类推,直到到达最后一个值。

但我仍然无法想象递归是如何在我脑海中运行的,尤其是 min = minimum(array, size - 1) 。 有人可以向我缓慢的大脑解释这段代码如何在堆栈中运行吗? 非常感谢。

【问题讨论】:

  • 那个代码是错误的——if (size == 1)应该是if (size == 0)
  • @Chronial - 不,size==1 是正确的
  • array[size] &lt; int min 接缝语法错误。
  • @Chronial 在这种情况下 size 是最后一个元素的索引,所以它是正确的。

标签: c++ arrays recursion c++14


【解决方案1】:

我修复了代码(通过访问array[size-1] 而不是array[size] 并稍微简化了它(通过使用std::min)。

int minimum(int array[], int size) {
    if (size == 1) {
        return array[0];
    } else {
        return std::min(array[size - 1], minimum(array, size - 1))
    }
}

int array[4] = {5, 99, 205, 1};
int smallest = minimum(array, 4);

现在您可能会看到minimum(array, 4) 等于std::min(array[3], minimum(array, 3)),等于std::min(array[3], std::min(array[2], minimum(array, 2))) ... 等于std::min(array[3], std::min(array[2], std::min(array[1], array[0])))

【讨论】:

    猜你喜欢
    • 2016-03-27
    • 1970-01-01
    • 1970-01-01
    • 2015-11-19
    • 1970-01-01
    • 2016-07-05
    • 2012-03-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多