die*_*lar 1 c recursion function
我正在编写一个用于改进递归函数学习的C代码.我的函数必须计算数组中接收的一组数字的平均值.我必须计算数组中数字的总和,甚至要返回它,同样我要计算函数内部的平均值(我打印过它)但是当我做返回时,main函数总是得到一个垃圾数字.
这是我的代码:
#include <stdio.h>
#include <stdlib.h>
float sum (int array[], int n)
{
float f; float z=n;
if (n==0) return (array[n]);
f=(array[n]+sum(array,n-1));;
return f/z;
}
int main ()
{
int *array, n, i;
float result;
printf("\nDimension de tu array: ");
scanf("%d", &n);
array=(int *) malloc (n*sizeof (int));
for (i=0; i<n; i++)
{
printf("Valor en A[%d]: ", i+1);
scanf("%d", &array[i]);
}
result=sum(array,n);
printf("\n\nEl promedio es igual a: %f ", result);
}
Run Code Online (Sandbox Code Playgroud)
问题出在这里:
return f/z;
Run Code Online (Sandbox Code Playgroud)
您的函数应该计算总和,但您已经除以元素数.
将其更改为:
return f;
Run Code Online (Sandbox Code Playgroud)
除以主要元素的数量:
result = sum(array,n) / n;
Run Code Online (Sandbox Code Playgroud)
另一个错误在这里:
if (n==0) return (array[n]);
f=(array[n]+sum(array,n-1));;
Run Code Online (Sandbox Code Playgroud)
应该(和缩进):
if (n==0)
return array[n - 1];
f = array[n - 1] + sum(array,n-1);
Run Code Online (Sandbox Code Playgroud)
数组的最后一个索引n - 1不是n.