gpt4 book ai didi

c++ - 如果比较取决于返回值,是否可以进行尾递归?

转载 作者:IT老高 更新时间:2023-10-28 22:05:25 25 4
gpt4 key购买 nike

我有一个家庭作业,要求一个函数使用直接递归来查找数组中最左边、最低、负整数的索引。附加要求是函数的参数是数组和大小,并且没有有效值的返回值为 -999。

我想出了这个:

int LowIndexMinNeg(int src[], int size)
{
if (size == 0)
return -999;
int index = LowIndexMinNeg(src, size - 1);

if (index >= 0)
return (src[size - 1] < src[index]) ? (size - 1) : index;
else
return (src[size - 1] < 0) ? (size - 1) : index;
}

它有效,满足要求,并且得到了我的满分。这可以用尾递归来实现吗?

在我看来,既然您必须从递归调用中获取结果以用于比较来决定是否传递该结果或更新它,这是不可能的,但递归仍然使我的大脑陷入困境一个它,所以我可能缺少一些明显的东西。

注意:我的家庭作业已经上交并评分。

最佳答案

如果在返回之前对递归的结果进行变换,则不是尾递归。

编辑:话虽如此,如果你想让函数尾递归:

const int SENTINEL= 0;

int LowIndexMinNeg(int src[], int size, int index)
{
if (size == 0)
{
if (index<0 || src[index]>=0)
return -999;
else
return index;
}

int current_index= size - 1;
int new_index= src[current_index]<=src[index] ? current_index : index;

return LowIndexMinNeg(src, size - 1, new_index);
}

并调用为 LowIndexMinNeg(src, src_size, src_size - 1)

EDIT2:找到名称不佳的最左边最负值。您可能可以将其声明为第一个最负值的索引。

EDIT3:删除大部分条件,因为更容易找到最小值的索引,然后检查它是否为负数。

关于c++ - 如果比较取决于返回值,是否可以进行尾递归?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4138252/

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