powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Оптимизировать функцию.
16 сообщений из 16, страница 1 из 1
Оптимизировать функцию.
    #38744303
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
 public static double F(double x, double y)
        {
            if (y == 0)
                return Math.Pow(x, 2);
            if (x == 0)
                return Math.Pow(y, 5) + y;
            var res = Math.Pow(F(x - 1, y), 3) + Math.Pow(F(x, y - 1), 4);
            return res;
        }
...
Рейтинг: 0 / 0
Оптимизировать функцию.
    #38744808
LameUser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Оптимизировать StackOverflow?

Ваша функция будет сходиться только при x, и y натуральных.

ЕвгенийВ
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
 public static double F(double x, double y)
        {
            if (y == 0)
                return Math.Pow(x, 2);
            if (x == 0)
                return Math.Pow(y, 5) + y;
            var res = Math.Pow(F(x - 1, y), 3) + Math.Pow(F(x, y - 1), 4);
            return res;
        }
...
Рейтинг: 0 / 0
Оптимизировать функцию.
    #38744829
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LameUser,
Понятное дело. Интересует общая методика, как тут избежать переполнения стека.
...
Рейтинг: 0 / 0
Оптимизировать функцию.
    #38744830
LameUser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВ,

Вы порядок цифр себе представляете, когда степени возрастают в геометрической прогрессии?
Этот интерес простой или практический?
...
Рейтинг: 0 / 0
Оптимизировать функцию.
    #38744850
cdtyjv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВLameUser,
Понятное дело. Интересует общая методика, как тут избежать переполнения стека.Убрать рекурсию, очевидно Любой рекурсивный алгоритм можно переписать на цикл - это фундаментальное свойство рекурсии.
...
Рейтинг: 0 / 0
Оптимизировать функцию.
    #38744865
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cdtyjvЕвгенийВLameUser,
Понятное дело. Интересует общая методика, как тут избежать переполнения стека.Убрать рекурсию, очевидно Любой рекурсивный алгоритм можно переписать на цикл - это фундаментальное свойство рекурсии.
Это общие слова. Нужно решение хотя бы не системное, а для этого конкретного случая.
...
Рейтинг: 0 / 0
Оптимизировать функцию.
    #38744927
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А какое математическое назначение у функции?
...
Рейтинг: 0 / 0
Оптимизировать функцию.
    #38744938
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PallarisА какое математическое назначение у функции?
Чисто теоретическая задача.
...
Рейтинг: 0 / 0
Оптимизировать функцию.
    #38744972
Pallaris
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВИнтересует общая методика, как тут избежать переполнения стека.

Для начала
Код: c#
1.
2.
3.
4.
if (y <= 0)
,,,,
if (x <= 0)
,,,,



Ну а в принципе - переписать на циклах
...
Рейтинг: 0 / 0
Оптимизировать функцию.
    #38745004
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1) Ну как бы на равенство сравнивать числа с плавающей запятой не комильфо. Нужно вводить некую дельту. Так что сравнивать число с нулем бессмысленно. Для Double есть еще понятия отрицательный и положительный нули.

2) Далее, есть предположение, что x и y - натуральные целые числа. Если это так, нужно сменить тип параметров, и явно приводить значение Math.Pow

3) Что касается переполнения, то ИМХО это не аргумент отказываться от рекурсии. Глубина рекурсии будет достаточной до момента переполнения размера размерности числа. К тому же, если мне память не изменяет, оптимизация компилятора автоматически превращает хвостовую рекурсию в цикл.

4) С учетом ранее сказанного про переполнение размерности числа, можно заранее оценить максимальные значения параметров и выкидывать Exception на значения из некорректного диапазона. Но это так, мысли вслух, возможно и не нужно этого делать.

5) Ну и нужно бы дать какое-то осмысленное название функции
...
Рейтинг: 0 / 0
Оптимизировать функцию.
    #38745026
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm791) Ну как бы на равенство сравнивать числа с плавающей запятой не комильфо. Нужно вводить некую дельту. Так что сравнивать число с нулем бессмысленно. Для Double есть еще понятия отрицательный и положительный нули.
Выше я писал, что задача представляет теоретический интерес, такие условности можно отстранить.
Arm792) Далее, есть предположение, что x и y - натуральные целые числа. Если это так, нужно сменить тип параметров, и явно приводить значение Math.Pow
См. выше.
Arm793) К тому же, если мне память не изменяет, оптимизация компилятора автоматически превращает хвостовую рекурсию в цикл.
F# или там Nemerle - да и то не всегда, нужно видоизменить даже при вычислении банального факториала, C# до этого еще не рос.
...
Рейтинг: 0 / 0
Оптимизировать функцию.
    #38745031
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВВыше я писал, что задача представляет теоретический интерес, такие условности можно отстранить.
С каких пор корректная работа с числами с плавающей запятой стала условностью?

К тому же, без внятного описания ЧТО ЖЕ должна делать функция, её очень трудно оптимизировать правильно.

Ну и самое главное, в вашей задаче без практического интереса, нет корректного выхода из рекурсии. Не учитываются отрицательные и дробные значения.
...
Рейтинг: 0 / 0
Оптимизировать функцию.
    #38745037
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79,
Ну можно поменять типы на int, а Math.Pow на DB.GetAmountSumm(.....).
...
Рейтинг: 0 / 0
Оптимизировать функцию.
    #38745038
DS53
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79ЕвгенийВВыше я писал, что задача представляет теоретический интерес, такие условности можно отстранить.
С каких пор корректная работа с числами с плавающей запятой стала условностью?

К тому же, без внятного описания ЧТО ЖЕ должна делать функция, её очень трудно оптимизировать правильно.

Ну и самое главное, в вашей задаче без практического интереса, нет корректного выхода из рекурсии. Не учитываются отрицательные и дробные значения.

По коду фукнции очевидно, что человек взял тип double только потому что у него размерность выше, а так работа у него только с целыми неотрицательными идет.
Если есть проблема с размерностью чисел и типами дынных - посмотрите тип BigInteger - появляется в .net, по-моему с версии 4.0
...
Рейтинг: 0 / 0
Оптимизировать функцию.
    #38745039
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DS53По коду фукнции очевидно, что человек взял тип double только потому что у него размерность выше
Отнюдь не очевидно. Хоть я тоже так предполагаю, но откидывать иные варианты не стоит. Работа с дробными числами тоже вполне возможна.

Поэтому и говорю, без описания функции трудно понять, насколько корректно она реализована.
...
Рейтинг: 0 / 0
Оптимизировать функцию.
    #38745066
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Видимо нужно преобразовать как то в цикл, но как, что то не соображу....
Еще на ум приходит применить мемоизацию, так, как например при передаче с параметрами x=3 и y=3 функция будет вызвана 39 раз с такими параметрами.

0 1
0 1
0 1
0 1
0 1
0 1
0 2
0 2
0 2
0 3
1 0
1 0
1 0
1 0
1 0
1 0
1 1
1 1
1 1
1 1
1 1
1 1
1 2
1 2
1 2
1 3
2 0
2 0
2 0
2 1
2 1
2 1
2 2
2 2
2 3
3 0
3 1
3 2
3 3

...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Оптимизировать функцию.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]