Как управлять рекурсивным возвратом поплавка? - PullRequest
1 голос
/ 08 ноября 2011

Я пишу код на C для улучшения изучения рекурсивных функций.Моя функция должна вычислять среднее из набора чисел, полученных в массиве.Я должен вычислить сумму чисел в массиве, даже чтобы вернуть ее, то же самое я должен вычислить среднее значение внутри функции (я напечатал это), но когда я делаю возврат, основная функция всегда получает номер мусора.

Это мой код:

#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);
}

Ответы [ 4 ]

6 голосов
/ 08 ноября 2011

Проблема здесь:

return f/z;

Предполагается, что ваша функция вычисляет сумму, но вы уже делите на число элементов.

Измените его на:

return f;

И разделите на количество элементов в вашем основном:

result = sum(array,n) / n;

И другая ошибка здесь:

if (n==0) return (array[n]);
f=(array[n]+sum(array,n-1));;

должно быть (и с отступом):

if (n==0)
    return array[n - 1];
f = array[n - 1] + sum(array,n-1);

Последний индекс массива - n - 1, а не n.

1 голос
/ 08 ноября 2011

Прежде всего, при вызове sum из main вы вызываете его с количеством элементов в массиве, а затем в sum вы используете это как индекс в массиве, который будетнеизвестная область за пределами массива.

И тогда я думаю, что вы должны проверить алгоритм ... Если вызвать с номерами 2, 4 и 8, вы получите среднее значение 2.66667, что далеко от правильного среднего значения4,6667.Просто выполните суммирование в рекурсивной функции и разделите полученный результат на n в main.

1 голос
/ 08 ноября 2011

В рекурсии вы предполагаете, что sum возвращает сумму, но фактически возвращает среднее значение.

1 голос
/ 08 ноября 2011

Я полагаю, что вы обращаетесь к array[n] для массива размером n.И последний индекс в таком массиве: n-1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...