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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4.333 из 5
Похожие ответы