【发布时间】: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] < int min接缝语法错误。 -
@Chronial 在这种情况下
size是最后一个元素的索引,所以它是正确的。
标签: c++ arrays recursion c++14