gpt4 book ai didi

c - 为什么我的函数在完成时不再调用自身(递归)?

转载 作者:太空宇宙 更新时间:2023-11-04 01:04:41 26 4
gpt4 key购买 nike

我目前已完成我的代码。但由于某种原因,我最后的递归调用没有被触发?我是否偶然遗漏了某种特殊代码?

int max(int arr[], int start, int end) {    
int greatest = arr[start];
if(start < end)
{

if(greatest<arr[start])
{
greatest = arr[start];
}
start++;
max(arr, start, end); // Doesn't seem to be triggering since it only returns 8
}
return greatest;
}

int main()
{
int greatest;
int arr[10] = {8,1,2,3,4,5,6,7,8,9};
int start = 0;
int end = 10;
greatest=max(arr, start, end);

pintf("%d\n", greatest);

}

最佳答案

只有第一次调用 max - 位于 main 中的那个 - 实际上将其返回值分配给任何东西。递归调用返回的值立即丢失;他们所做的工作对最终结果毫无意义。您需要将对 max 的递归调用结果分配给 greatest

请记住,每次递归调用都会打开一个新范围,每个范围都有自己的 greatest 变量版本。每个递归调用中的赋值只修改它们的变量版本,而不是封闭范围中的变量;这意味着在获取 arr[0] 的值后,第一次调用的版本永远不会设置为任何值;当最外层的调用恢复时,这个版本的值返回给 main,而不管递归调用之间所做的工作。

您还有一个不相关的错误,即您递归到对 max 的另一个调用(并在该调用中分配给 greatest)之前 检查你是否已经到达数组的末尾,这将溢出数组的末尾并用那里找到的任何东西覆盖最终结果(正如保罗指出的那样,你也分配给 greatest在与当前值进行比较之前,所以比较基本上没有意义)。您需要移动支票内的所有内容以确保不会发生这种情况。

关于c - 为什么我的函数在完成时不再调用自身(递归)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26457707/

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