Переписать программу, используя рекурсию - 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();
}