如何管理浮动的递归返回?

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)

Mys*_*ial 6

问题出在这里:

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.