Erd*_*dem 5 c arrays recursion
考虑这段代码,它计算数组的最大元素.
#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;
}
Run Code Online (Sandbox Code Playgroud)
为什么这个else
块叫四(4)次?
该函数是递归的,因此会被多次调用。
刚开始时,n=5。它将采用 else 块(n 不为 1)。然后,您再次使用 n-1 (n=4) 调用最大值。同样,else 块被占用。
总而言之,在 n 达到 1 之前,该函数被调用 4 次,然后它接受 if 块并返回 ar[0]。
正如其他人提到的,所编写的函数不会返回列表的最大值。奇怪的是,它似乎总是返回 5,除非列表数组大小为 1,在这种情况下它返回该元素的值。
相反,递归方法通常涉及每次将列表分成两半,然后当列表最终分解为元素对时返回每对的最大值。