考虑这段代码,它计算数组的最大元素。
#include <stdio.h>
int maximum(int arr[], int n)
{
if (n == 1) {
return arr[0];
} else {
int max = maximum(arr, n-1);
printf("Largest element : %d\n", max);
return 5; // return arr[n-1] > max ? arr[n-1] : max;
}
}
int main()
{
int array[5] = {5, 23, 28, 7, 1};
printf("Maximum element of the array is: %d", maximum(array, 5));
return 0;
}
为什么 else
block 被调用四 (4) 次?
最佳答案
该函数是递归的,因此会被多次调用。
刚开始时,n=5。它将占用 else block (n 不为 1)。 然后,您再次使用 n-1 (n=4) 调用最大值。同样,使用 else block 。
总而言之,该函数在 n 达到 1 之前被调用了 4 次,随后它接受 if block 并返回 ar[0]。
正如其他人所提到的,所写的函数不会返回列表的最大值。奇怪的是,它似乎总是返回 5,除非列表数组大小为 1,在这种情况下它返回该元素的值。
相反,递归方法通常涉及每次将列表分成两半,然后在列表最终分成元素对时返回每对的最大值。
关于c - 递归查找数组的最大元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12285978/