【发布时间】:2016-05-16 14:44:24
【问题描述】:
我正在尝试使用递归返回数组中最大的双精度数。
sz 是数组中元素的数量。
start 是开始当前调用的数组的索引。
这是我目前所拥有的。为什么函数在到达'return max'行时没有终止!?
double arrayMax (double arr[], int sz, int start) {
double max;
if (start == sz) {
return max;
} else {
if (arr[start] > max) {
max = arr[start];
}
arrayMax(arr, sz, start+1);
}
return max;
}
【问题讨论】:
-
函数调用在到达
return max;行时终止。 -
当它达到return max时,它会再调用arrayMax几次,然后返回列表中的第一个元素,而不是列表中最大的double。
-
天啊,为什么有人要为此使用递归?如果这是一个学校作业(听起来像一个),那么这不会教你如何编码,而是教你如何不编码。你听说过堆栈溢出吗?当您在大型阵列上尝试此“算法”时,您会看到一个。 :)
-
@stumpylumpy 你怎么知道它又调用了 arrayMax 几次?
-
退后一步,看看这个函数做了什么。首先,它声明了一个
double变量并且不对其进行初始化。然后,要么返回这个未初始化的值,要么将变量设置为数组中的第一个元素,调用函数并忽略结果,然后返回变量的值。所以它要么返回一个未初始化的值,要么返回数组中的第一个元素。