gpt4 book ai didi

c - 从递归函数传递指针

转载 作者:太空宇宙 更新时间:2023-11-04 08:04:13 24 4
gpt4 key购买 nike

有人要求我只用递归方法编写选择排序代码。所以我考虑制作另一个函数来查找存储最大值的数组,然后在我的另一个函数中切换它。

void p_rec_max(int data[], int cur, int arrSize,int * x) {
if(cur < arrSize - 1) {
if(data[cur] > data[arrSize - 1]) {
*x = cur;
} else if(data[cur] < data[arrSize - 1]){
*x = arrSize - 1;
}
p_rec_max(data,cur + 1,arrSize,&x);
}
}

void rec_selection_sort(int data[], int arrSize) {
if(arrSize > 0) {
int maxi,temp;
p_rec_max(data,0,arrSize,&maxi);
temp = data[arrSize - 1];
data[arrSize - 1] = data[maxi];
data[maxi] = temp;
rec_selection_sort(data,arrSize - 1);
}
}

有这样的警告

在函数“p_rec_max”中:警告:从不兼容的指针类型传递“p_rec_max”的参数 4 [默认启用]注意:应为 'int *' 但参数类型为 'int **'

而且它根本不会改变我的阵列。我缺少在函数中传递指针的信息无法帮助我解决该问题。你们可以修复我的代码,然后向我解释我的代码有什么问题吗?谢谢

最佳答案

第一个问题

这一行有问题:

p_rec_max(data,cur + 1,arrSize,&x);
^^

由于 x 是一个 int *&x 是一个 int ** 这不是函数期望。

将行更改为:

p_rec_max(data,cur + 1,arrSize, x);

x

前面没有 &

第二个问题

您的 p_rec_max 函数找不到最大数组值的索引。

如果所有数组元素都相同,则代码永远不会执行 *x = ...。换句话说,maxi 永远不会被写入,您最终会在这里使用未初始化的索引 data[arrSize - 1] = data[maxi]; 这是未定义的行为,可能会崩溃你的程序。

除此之外,我认为函数中的基本逻辑是错误的。代码总是将 cur 与最后一个数组元素进行比较。这似乎是错误的。我认为您应该将 cur 与迄今为止找到的最大值进行比较。这可以使用变量 x 来完成。

类似于:

void p_rec_max(int data[], int cur, int arrSize,int * x) {
if(cur < arrSize) {
if(data[cur] > data[*x]) {
*x = cur;
}
p_rec_max(data, cur + 1, arrSize, x);
}
}

rec_selection_sort 中这样调用它:

    maxi = 0;  // Assume index zero holds the maximum
p_rec_max(data, 1, arrSize, &maxi);
^
Start searching from index 1

顺便说一句: 使用递归函数来查找数组中的最大值当然不是一个好方法,但我猜你不能使用简单的 forwhile 循环。

关于c - 从递归函数传递指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43960971/

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