gpt4 book ai didi

c - 如何使用递归函数找到最大数

转载 作者:太空宇宙 更新时间:2023-11-04 07:49:52 25 4
gpt4 key购买 nike

我试图了解如何使用递归函数找到最大数,但我并不真正了解如何进行。有这个代码:

#include <stdio.h>
#include <stdlib.h>
int main()
{

int ar[100],n,i;
int *ptr;
printf("Enter size of the list:");
scanf("%d", &n);
printf("Printing the list:\n");
for (i = 0; i < n ; i++)
{
scanf("%d", &ar[i]);
}
ptr=&ar;
int max=maximum(ptr,n);
printf("ma %d",max);
return 0;
}
int maximum(int ar[], int n)
{

int max;
if(n+1==1)
{
return ar[n];
}
max =maximum(ar,n-1);
return ar[n]>max?ar[n]:max;
}

它实际上在做什么以及如何做?使用指针指向整数数组是否正确?我希望你能帮助我理解它!

最佳答案

您使用 int ar[100] 为 100 个整数的数组预留内存, 然后输入 n这是使用 scanf("%d", &n) 设置的.如果您在此阶段输入大于 100 的数字,您的程序将出现段错误,因为您的循环 for (i = 0; i < n ; i++)将尝试访问 ar[100]这是内存访问错误(可用的最高数组索引是 ar[100 - 1] ,请注意 100 - 1 < 100)。不管怎样,你填n ar 的索引在循环。 ptr = &ar只是分配ar的起始地址至 ptr .顺便ptr = ar也可以,&没有必要。现在你可以使用 ptr与您使用 ar 的方式相同.

理解递归最简单的方法是直接看maximum的最后一次调用。 .但首先,了解您通过了 ptr到与传递 ar 相同的函数(请记住,自 main 以来,它们在 ptr = ar 中是相同的。)

所以在最后一次调用maximum , 当n + 1 == 1 (与 n == 0 相同),它返回 ar[n]这是ar[0] ,首先是您为 'Printing the list' 输入的数字(它存储在 ar[0] 中)。

现在是倒数第二个 maximum , n + 1 == 1是错误的,因为 n = 1所以我们去max = maximum(ar, n - 1) .这是最后一次调用 maximum 的结果我刚刚解释过,所以max的值为 ar[0] .现在你有 return ar[n] > max ? ar[n] : max ,与 return ar[1] > ar[0] ? ar[1] : ar[0] 相同.这和

是一样的
if (ar[1] > ar[0]) {
return ar[1];
} else {
return ar[0];
}

你可以看到这会返回较大的一个,ar[0]ar[1] .现在是倒数第三次调用 maximum , max是最后第二次调用 maximum 的结果.你可以看到模式出现了。您将返回较大者:maxar[n]对于所有其余的调用 maximum , 当你第一次调用 maximum 时,您将比较 ar 中的所有值找到它的最大值并返回它。

还有,阿杰说的对,ar[n]正在访问您从未在循环中初始化的值。你应该写 int max = maximum(ptr, n - 1)main解决这个问题。

关于c - 如何使用递归函数找到最大数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54511381/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com