递归地查找数组的最大元素

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)次?

Kev*_*vin 3

该函数是递归的,因此会被多次调用。

刚开始时,n=5。它将采用 else 块(n 不为 1)。然后,您再次使用 n-1 (n=4) 调用最大值。同样,else 块被占用。

总而言之,在 n 达到 1 之前,该函数被调用 4 次,然后它接受 if 块并返回 ar[0]。

正如其他人提到的,所编写的函数不会返回列表的最大值。奇怪的是,它似乎总是返回 5,除非列表数组大小为 1,在这种情况下它返回该元素的值。

相反,递归方法通常涉及每次将列表分成两半,然后当列表最终分解为元素对时返回每对的最大值。