c - 递归查找数组的最大元素

标签 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;
}

为什么 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/

相关文章:

c - For 循环跳过 scanf()

javascript - 使用变量作为 JSON 的键

c# - 递归 yield

javascript - 在循环完成nodejs请求之前执行回调

algorithm - 检查是否可以对二进制字符串进行分区,使得每个分区都是 5 的幂

javascript - 递归未超过第一级

c - 无法编译读取智能卡的 C 应用程序

c - 函数 'enterChar' [-Wimplicit-function-declaration] 的隐式声明

c++ - pthread_self() 很贵吗?

c++ - 通过指针传递数组