Вычисление полинома в C

Пока я выполнял практическое упражнение, я столкнулся с вопросом, инструкция такова:

Спросите значение X и спросите степень многочлена. Напишите функцию вида double polynomial(double x, double n), которая рекурсивно запрашивает значение каждого коэффициента и возвращает сумму anxn от n до 0.

Я сделал свое решение с помощью циклов (это следующее), но у меня есть сомнения относительно того, как я мог бы сделать это с помощью рекурсии.

for (i = 0; i <= order; i++)
{
    printf("Enter coefficients of polynomial at x^%d\n", i);
    scanf("%f", &coefficient[i]); 
}
  
for (i = 0; i <= order; i++)
{
    sum += coefficient[i] * pow(x, i);
}

Я прикрепляю блок кода, который я сделал с помощью циклов, но я хотел бы сделать это с помощью рекурсии.

ОТ: %f не подходит для сканирования двойника. Проверьте руководство.

Support Ukraine 19.04.2023 06:43

ОТ: Всегда, всегда, всегда... проверяйте возвращаемое значение scanf. Здесь он должен быть равен 1. В противном случае возникает ошибка ввода, т.е. либо реальная ошибка ввода, либо пользователь набрал что-то, не являющееся значением с плавающей запятой.

Support Ukraine 19.04.2023 06:45
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
2
65
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Напишите функцию вида double polynomial(double x, double n)

немного странно для этой задачи. Вероятно, это должно быть

double polynomial(double x, unsigned n);
                            ^^^^^^^^

Я не буду писать весь код, но вот некоторый псевдокод для рекурсивной реализации:

double polynomial(double x, unsigned n)
{
     coefficient = read_nth_coefficient_from_user

     if (n == 0) return coefficient

     return (coefficient * (x to the power of n)) + polynomial(x, n - 1)
}

Обратите внимание на сравнение n == 0 для остановки рекурсии и n - 1 при выполнении рекурсивного вызова. Это причина того, что n должно быть unsigned вместо double

заключительное примечание:

Я понимаю, что это «практическое упражнение», так что хорошо, продолжайте и используйте рекурсию. Но такую ​​задачу рекурсией в реальном коде не решить. Петля намного лучше. В общем, рекурсии следует избегать, если она не дает вам значительных преимуществ. И когда используется рекурсия, позаботьтесь о том, чтобы количество рекурсивных вызовов имело хорошо контролируемый (и довольно низкий) предел. Большое количество рекурсивных вызовов может привести к переполнению стека. Используйте рекурсию с осторожностью.

Что такое coef= get_nth_coef_from_user?? Прошу прощения

YAHIR JOSUE OSTOS JIMENEZ 19.04.2023 06:33

@YAHIRJOSUEOSTOSJIMENEZ Это псевдокод для чтения коэффициента для текущего уровня. В принципе что-то вроде вашего кода: printf("Enter coefficients of polynomial at x^%d\n",i); scanf("%f",&coefficient[i]); Только без цикла и без использования массива

Support Ukraine 19.04.2023 06:41

Другие вопросы по теме