使用递归求最大值
* 递归排序:能用递归解决的问题都可以使用非递归来完成。
* 时间复杂度:T(N) = a*T(N/b) + O(N^d)
* 1) log(b,a) > d --> 复杂度为O(N^log(b,a))
* 2) log(b,a) = d --> 复杂度为O(N^d * logN)
* 3) log(b,a) < d --> 复杂度为O(N^d)
* 在本题中,将N样本量分成两部分,执行两次因此a=2;b=2;除此之外还有一个比较操作,常数等级O(N^0)=O(1),所以最终时间复杂度为O(N^log(2,2))=O(n)
思路:递归调用,就可以找到最初的出发点
#include<stdio.h>
#include<stdlib.h>
# define N 10 //数组元素个数
int sum(int arr[],int n)
{
if(n==0)
return arr[0];
else
{
return sum(arr,n-1)+arr[n];
}
}
int sort(int arr[],int n)
{
if(n==0)
return arr[0];
else
{
if(sort(arr,n-1)<arr[n-1])
return arr[n-1];
}
return sort(arr,n-1);
}
int main()
{
// 数组 里面任意整数 使用递归算法求各元素之和
int arr[]={9,8,7,6,5,4,3,2,1,10};
int s=sum(arr,N-1);
int max=sort(arr,N);
printf("max=%d\n",max);
printf("s=%d\n",s);
getchar();
return 0;
}
运行结果