none
Рекурсия C# Метод Дихотомии RRS feed

  • Вопрос

  • Здравствуйте, хочу реализовать метод дихотомии с помощью рекурсии. В ходе компиляции выходит логическая ошибка.
    Задан отрезок [a,b] = [0,5] это я описал в начале функции. В момент рекурсии вновь вызывается функция и переменным a и b присваиваются опять же эти значения , выходит бесконечная рекурсия.Как решить проблему?
    Пробовал значения a,b передать функции Dihotomy как параметры , после возникает ошибка уже в функции func

    static public double Dihotomy(double eps)
            {
                
                double c, a = 0, b = 5;
    
                if (eps < 0 || eps == 0)
                {
                    Console.WriteLine("Неверно заданное приближение");
                }
                if (func(a) * func(b) < 0)
                {
                    c = a + b / 2;
                    a = c;
                }
                else
                {
                    c = a + b / 2;
                    b = c;
                }
                return (b - a < eps) ? c : Dihotomy(eps);
            }
    
            static public double func(double x)
            {
                return Math.Pow(x, 2) - 2;
            }

    20 апреля 2015 г. 21:14

Ответы

  • Действительно, значения a и b нужно передать, как параметры, а локальные переменные с этими именами удалить. И еще замечание: с точностью нужно сравнивать модуль разности b и a.

    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

    21 апреля 2015 г. 5:58

Все ответы

  • В Вашей программе после первого же цикла
    ничего нового не происходит,
    Вы заново переприсваиваете ключевым переменным, a и b, их начальные значения.
    Исключение - переполнение по вложенности рекурсии.
    20 апреля 2015 г. 22:55
  • Действительно, значения a и b нужно передать, как параметры, а локальные переменные с этими именами удалить. И еще замечание: с точностью нужно сравнивать модуль разности b и a.

    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

    21 апреля 2015 г. 5:58
  • Еще ошибка (не сразу заметил). При вычислении c сумму a и b возьмите в скобки.

    Если сообщение помогло Вам, пожалуйста, не забудьте отметить его как ответ данной темы. Удачи в программировании!

    • Предложено в качестве ответа kosuke904 24 апреля 2015 г. 9:49
    21 апреля 2015 г. 6:09
  • Ну вот как раз это я и говорил)
    • Изменено llotall 22 апреля 2015 г. 12:29
    22 апреля 2015 г. 12:17
  • Ужас, внимание наверное первостепенное что должно быть в программировании ,про скобки прям в точку, очень тупую ошибку допустил.


    • Изменено llotall 22 апреля 2015 г. 12:28
    22 апреля 2015 г. 12:22