一、关于递归算法和一般算法
递归算法和一般算法相比,递归算法的思维量会大很多,不仅很难理解,用起来还容易出错,所以大家平时用一般算法就足够了。就拿今天我们要实现的“求数组中的最值”来举例吧,用一般算法一个循环直接搞定,但是用递归算法吧……反正我是代入具体的数据在草稿纸上演算了半天才搞明白函数的整个流程。
但你如果要问:那你为什么还要发这么一篇递归算法的博客?
那我只能回答:因为递归算法是数据结构第六章的内容。
二、函数实现
以下是函数的完整代码,如果你觉得不太好理解建议代入具体数值在草稿纸上一步一步推,跟着函数走一遍流程,整个过程就会很清晰了。
int Compare(int* arr,int i)//i为数组中元素的最大下标
{
int min;
if (i == 0)//若数组中只有一个元素,则直接返回该元素
return arr[0];
else
{
min = Compare(arr, i - 1);//递归调用
if (min > arr[i])
return arr[i];
else
return min;
}
}
三、测试函数正确性
为了测试函数的正确性,我们再写一个主函数,代入具体数值进行测试。
int main()
{
int arr1[] = {9,5,7,2,4};
int arr2[] = { 1,1,1 };
printf("%d\n", Compare(arr1,4));
printf("%d", Compare(arr2,2));
return 0;
}
四、运行结果