递归--实现数组求最大值与平均值

首先需要动态开辟数组实现数组的数据存储

 求最大值:

这里的思路通过设置prev与last用于标记数组的位置,通过a[prev]>a[last]对比,保存更大的数据,并且不断重复这一操作。如果a[prev]<a[last],将用prev覆盖last的位置,last后移

求平均值:

 

代码实现:

#include<stdio.h>
#include<stdlib.h>
int maxint(int*a,int length,int prev,int last)
{
	if (a[prev]>a[last])
	{
		last++;
		maxint(a,length, prev, last);
		return a[prev];
	}
	else
	{
		if (last>=length)
		{
			return a[prev];
		}
		else
		{
			prev = last;
			last++;
		}
		maxint(a,length, prev, last);
	}
}


float average(int* a,int length)
{

	if (length==1)
	{
		return a[length - 1];
	}
	else
	{
		return (float)(average(a,length-1)*(length-1) + a[length - 1]) / length;
	}
}




int main()
{
	//实现数组的动态输入
	int length;
	printf("请输入数组的长度:");
	scanf_s("%d", &length);
	int* a=(int*)malloc(sizeof(int)*length);
	if (!a)
	{
		printf("malloc fail!");
		exit(-1);
	}
	printf("输入%d个元素\n", length);
	for (int i=0;i<length;i++)
	{
		int x;
		scanf_s("%d", &x);
		a[i] = x;
	}
	for (int i=0;i<length;i++)
	{
		printf("%d ",a[i]);
	}
	printf("\n");
	int max = maxint(a,length, 0, 1);
	printf("数组中最大值为%d\n", max);
	float avg = average(a, length);
	printf("数组平均值为%f\n", avg);

	free(a);
	system("pause");
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值