Пока я выполнял практическое упражнение, я столкнулся с вопросом, инструкция такова:
Спросите значение 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);
}
Я прикрепляю блок кода, который я сделал с помощью циклов, но я хотел бы сделать это с помощью рекурсии.
ОТ: Всегда, всегда, всегда... проверяйте возвращаемое значение scanf
. Здесь он должен быть равен 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?? Прошу прощения
@YAHIRJOSUEOSTOSJIMENEZ Это псевдокод для чтения коэффициента для текущего уровня. В принципе что-то вроде вашего кода: printf("Enter coefficients of polynomial at x^%d\n",i); scanf("%f",&coefficient[i]);
Только без цикла и без использования массива
ОТ:
%f
не подходит для сканирования двойника. Проверьте руководство.