Member 12851725 Ответов: 2

Tail-рекурсивная функция для подсчета всех чисел, превышающих среднее значение в массиве


Мне нужно сделать функцию, которая вычисляет среднее значение и возвращает количество значений, превышающих среднее. Например, передача массива {4, 5, 12, 17} должна возвращать 2 (потому что 12 и 17 больше среднего значения 9,5). До сих пор я писал функцию для возврата среднего значения, но как я могу заставить ее считать числа больше среднего и держать ее хвост-рекурсивной?
Ниже приведена средняя функция.

Что я уже пробовал:

int TAvg(int* a, int size, int acc=0, int num=0){ //acc is the sum so far, num is the number of all elements
if (size == 0){ 
    return (acc / num); 
}
return TAvg(a, size - 1, acc+a[size-1], num+1);}

Nelek

Должны ли вы делать все это в одной и той же функции?

2 Ответов

Рейтинг:
1

Theo Buys

Похоже на домашнее задание...

Делать:
1. вычислите среднюю рекурсивность.
2. раскручивая рекурсию подсчитайте выше среднего.


Рейтинг:
1

Patrice T

Мы не делаем вашу домашнюю работу.
Домашнее задание не предназначено для проверки ваших навыков просить других людей выполнять вашу работу, оно предназначено для того, чтобы помочь вашему учителю проверить ваше понимание пройденных вами курсов, а также проблем, возникающих при их применении.
Любая ваша неудача поможет учителю выявить ваши слабости и наметить меры по их исправлению.
Итак, попробуйте, перечитайте свои уроки и приступайте к работе. Если вы застряли на конкретной проблеме, покажите свой код и объясните эту точную проблему, мы можем помочь.

Если вы не изучаете рекурсию, я рекомендую не использовать ее для такого рода функций. Поскольку рекурсия не делает запись проще, компилятор, скорее всего, перепишет ее как цикл, а если нет, то это своего рода злоупотребление системой.

Цитата:
но как я могу заставить его считать числа больше среднего и держать его хвост-рекурсивным?
Короткий ответ: вы не можете. Просто потому что вам нужен средний до начинаю считать.