Переписать программу, используя рекурсию - C#
Формулировка задачи:
Сказали внести изменение в программу, сделать так,чтобы всё высчитывалось через рекурсию.
Не понимаю, как это можно сделать. Скоро сдавать уже нужно..
Помогите, пожалуйста, подскажите , как это можно сделать.
Программа высчитывает следующее:
Код программы
Заранее спасибо.
Для х изменяющегося от a до b с шагом (b-a)/k, где (k=10), вычислить функцию f(x), используя ее разложение в степенной ряд в двух случаях:
а) для заданного n;
б) для заданной точности e (e=0.0001).
Для сравнения найти точное значение функции.
Функция:y=(x*sin 45)/(1-2*x*cos45+x*x)
Диапазон изменения аргумента:0,1<=x<=0,8
n=40
Сумма:s=x*sin45+x^2*sin(2*45)+…+x^n*sin(n*45)
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Lab3 { class Program { static void Main(string[] args) { Console.WriteLine("Вычисление функции y=(x*sin 45)/(1-2*x*cos45+x*x)"); Console.ReadLine(); double x, y, a = 0.1, b = 0.8, k = 10, Summ_n = 0, Summ_E = 0;// х-значение параметра; Summ_n-значение суммы для заданного n;Summ_E- значение суммы для заданной точности; y-точное значение функции. double step, e=0; bool ok = false; while (!ok) { Console.WriteLine("Введите точность(н-р, число 0, 0001):"); if (double.TryParse(Console.ReadLine(), out e) && (e > 0)) ok = true; else Console.WriteLine("Ошибка! Введите вещественное положительное число!"); } int n = 40; step = (b - a) / k; for (x = 0.1; x <= 0.8; x += step) { for (int i = 0; i < n; i++) { Summ_n = Summ_n + Math.Pow(x, i) * Math.Sin(i * 45); } int j = 1; double item; do { item = Math.Pow(x, j) * Math.Sin(j * 45); Summ_E = Summ_E + item; j++; } while (Math.Abs(item) >=e); y = (x * Math.Sin(45)) / (1 - 2 * x * Math.Cos(45) + x * x); Console.WriteLine("x={0,-7} Summ_n={1,-18} Summ={2,-19} y={3}", x, Summ_n, Summ_E, y); Summ_n = 0; Summ_E = 0; } Console.WriteLine("Для выхода нажмите Enter..."); Console.ReadKey(); } } }
Решение задачи: «Переписать программу, используя рекурсию»
textual
Листинг программы
static double Summ_n, Summ_E; static void Sum(int n, double x) { Summ_n += Math.Pow(x, n) * Math.Sin(n * 45); if (n > 0) Sum(n - 1, x); } static void Step(int n, double e, double x, double step) { if (x <= 0.8) { Sum(n, x); int j = 1; double item, y; do { item = Math.Pow(x, j) * Math.Sin(j * 45); Summ_E += item; j++; } while (Math.Abs(item) >= e); y = (x * Math.Sin(45)) / (1 - 2 * x * Math.Cos(45) + x * x); Console.WriteLine("x={0,-7} Summ_n={1,-18} Summ={2,-19} y={3}", x, Summ_n, Summ_E, y); Summ_n = 0; Summ_E = 0; Step(n, e, x + step, step); } } static void Main(string[] args) { Console.WriteLine("Вычисление функции y=(x*sin 45)/(1-2*x*cos45+x*x)"); Console.ReadLine(); double x=0.1, y, a = 0.1, b = 0.8, k = 10;// х-значение параметра; Summ_n-значение суммы для заданного n;Summ_E- значение суммы для заданной точности; y-точное значение функции. double e = 0, step = (b - a) / k; bool ok = false; while (!ok) { Console.WriteLine("Введите точность(н-р, число 0, 0001):"); if (double.TryParse(Console.ReadLine(), out e) && (e > 0)) ok = true; else Console.WriteLine("Ошибка! Введите вещественное положительное число!"); } int n = 40; Step(n, e, x, step); Console.WriteLine("Для выхода нажмите Enter..."); Console.ReadKey(); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д