递归算法3——简单递归之求n个数的最大值

【分析】

假设元素序列存放在数组a中,数组a中n个元素的最大值可以通过将a[n-1]与前n-1个元素最大值比较后得到。
当n=1时有findmax(a,n)=a[0];
当n≥1时,有findmax(a,n)=(a[n-1] > findmax(a, n-1) ? a[n-1] : findmax(n-1))。

也就是说,数组a中只有一个元素时,最大者是a[0],超过一个元素时,则要进行比较最后一个元素a[n-1]与前n-1个元素的最大值,其中较大的元素即为所求。而前n-1个元素中的最大值则需要继续调用findmax函数。

code:

#include<stdio.h>
int findmax(int a[], int n);
void main()
{
	int a[] = { 55,33,22,77,99,88,11,44 }, n, i;
	n = sizeof(a) / sizeof(a[0]);
	printf("数组中的元素:");
	for (i = 0; i < n; i++)
		printf("%4d", a[i]);
	printf("\n最大的元素:%d\n", findmax(a, n));
	getchar();
}
int findmax(int a[], int n)
{
	int m;
	if (n <= 1)
		return a[0];
	else
	{
		m = findmax(a, n - 1);
		return a[n - 1] >= m ? a[n - 1] : m;
	}
}

结果:

猜你喜欢

转载自blog.csdn.net/baidu_36669549/article/details/104136870