Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
0 / 0 / 0
Регистрация: 20.10.2016
Сообщений: 54

Что не так?

04.10.2017, 22:52. Показов 2112. Ответов 33
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Надо написать программу которая бы считала по формуле ниже. Я написал, но выдаёт ошибку
Exception in thread "main" java.lang.ArithmeticException: / by zero
at Calc2.main(Calc2.java:7)
Что делать?
Java
1
2
3
4
5
6
7
8
9
10
public class Calc2 {
    public static void main(String[] args) {
        int n= 10;
        for (int i=0; i<=n;i++) {
            double res=(1/i)+(5*i*i*i);
            System.out.println(res);
        }
        
    }
}
P.S. значение при n=10 примерно 5.68
Изображения
 
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.10.2017, 22:52
Ответы с готовыми решениями:

Что не так с кодом? ( пытаюсь понять, что не так? )
Есть исходный код. Hook, работает хорошо, но есть минус огромный - перестаёт писать в лог, при открытии программы\игры Фуллскрином. т.е...

И так, что не так с моим запросом на добавление записи в таблицу?
$sql = 'INSERT INTO product ' . '(name, code, price, category_id, brand, availability,' . 'description,...

Как сделать так что я мог умножать не на два числа а на 3,4,5 и так далее?
Вот код: #include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; int main(){ float a,c; char b; skip: ...

33
 Аватар для ArtemFM
746 / 493 / 285
Регистрация: 10.09.2015
Сообщений: 1,530
05.10.2017, 01:00
Лучший ответ Сообщение было отмечено HanZR как решение

Решение

Студворк — интернет-сервис помощи студентам
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class SimpleFactorial {
    public static void main(String[] args) {
        int n = 10;
        System.out.println(solution(n));
 
    }
 
    public static float solution(int n) {
       float result = 1;
        for (int i = 1; i <= n; i++) {
           result *= 1 / factorial(i) + 5 * Math.pow(i , 3);
       }
       return result;
    }
 
    public static float factorial(int n) {
        if (n == 1) {
            return 1;
        }
        return factorial(n - 1) * n;
    }
}
Добавлено через 2 минуты
вывод: 5.677593E26
1
0 / 0 / 0
Регистрация: 20.10.2016
Сообщений: 54
05.10.2017, 01:01  [ТС]
Да, получается 5.677593E26 что верно в принципе. Спасибо!
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
05.10.2017, 08:21
Цитата Сообщение от HanZR Посмотреть сообщение
Мне казалось что это интеграл

Не по теме:

:facepalm: как можно было такое подумать?

0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
05.10.2017, 08:35
ArtemFM, перестань использовать рекурсию, это плохо, пнятненько.
И подумай, нельзя ли в факториала переиспользовать значение с предыдущей итерации
0
 Аватар для ArtemFM
746 / 493 / 285
Регистрация: 10.09.2015
Сообщений: 1,530
05.10.2017, 09:00
xoraxax, вообще, по опыту, зачастую рекурсия выигрывает циклы. Проверенно опытом.
Во вторых, я её использую, не потому что мол круто или ещё что, просто я как раз сейчас вернулся к истокам и укрепляю познания рекурсии ибо в реализации деревьев (бинарных) приходится её юзать ибо конвертация дерева в лист проще реализуется рекурсией....точнее 4 строчки. Да и вообще много задач, где необходима мне рекурсия. А так да, её нельзя использовать где попало... А так да, можно было реализовать всё в одном методе, но делал наскоряк, ибо висят задачи по многопоточности... Спасибо за совет )
0
05.10.2017, 10:09

Не по теме:

Цитата Сообщение от ArtemFM Посмотреть сообщение
зачастую рекурсия выигрывает циклы.
Если Вы про простоту кода, то да. Если про производительность, есть сомнения по этому поводу.

0
 Аватар для ArtemFM
746 / 493 / 285
Регистрация: 10.09.2015
Сообщений: 1,530
05.10.2017, 10:14
Если честно, то судя по Шилдту, то он пишет, да и во многих источниках также, что рекурсия медленнее, чем циклы...
Но по опыту, а именно PerfomanceTest показывал ни раз, когда я делал 2 метода разными способами и один содержал реализацию рекурсией, что рекурсия выигрывала в 1,5 раза. Жаль, я уже не помню точных задач, где это было выявлено, но они были... Как это было выявлено. Мы с коллегой часто соревнуемся, у кого код будет работать быстрее и, кстати, он также удивлялся, когда видел, что рекурсия выигрывала зачастую. Не всегда, но всё же... Так что относительно это всё...
0
 Аватар для Kukstyler
1260 / 870 / 268
Регистрация: 02.04.2009
Сообщений: 3,307
05.10.2017, 10:21
ArtemFM, на мой взгляд - значит цикл не оптимально написан.
Рекурсия создаёт в памяти отдельную копию функции для каждой итерации (естественно, вместе со своими переменными). А это требует немало "лишних" операций с памятью. Если цикл не нагромождён уймой ненужных переменных и алгоритм выбран оптимальный, то он должен быть де факто быстрее рекурсии.
0
 Аватар для ArtemFM
746 / 493 / 285
Регистрация: 10.09.2015
Сообщений: 1,530
05.10.2017, 10:35
Всё возможно. Я просто описываю свои наблюдения. Я не гуру так-то, а обычный прогер джун. Так что спорить не буду. Возможно и так... Буду лучше наблюдать ))) и для этого я на этом сайте и есть, чтоб черпать что-то новое... Тут зачастую такие мелочи открываются, которые в видео или книгах не найдёшь...
1
05.10.2017, 10:38

Не по теме:

Цитата Сообщение от ArtemFM Посмотреть сообщение
для этого я на этом сайте и есть, чтоб черпать что-то новое...
Я тоже. :) Кстати, я тоже далеко не гуру в данном разделе.

0
958 / 577 / 136
Регистрация: 23.05.2012
Сообщений: 7,364
05.10.2017, 14:46
Цитата Сообщение от ArtemFM Посмотреть сообщение
рекурсия выигрывала в 1,5 раза
Простой тест для подсчета суммы:
Кликните здесь для просмотра всего текста

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
public class TestRecursion {
    private static int maxN;
    private static double testCount = 100000.0;
 
    public static void main(String[] args) {
        maxN = 1;
        for (int i = 0; i < 5; i++) {
            System.out.println("     maxN = " + maxN);
            long start = System.currentTimeMillis();
            int result = 0;
            for (int j = 0; j < testCount; j++) {
                result = calc();
            }
            long finish = System.currentTimeMillis();
            System.out.printf("Calc          result =  %d        %f ms\n", result, (finish-start) / testCount);
            start = System.currentTimeMillis();
            for (int j = 0; j < testCount; j++) {
                result = calcRecursive(0);
            }
            finish = System.currentTimeMillis();
            System.out.printf("CalcRecursive result =  %d        %f ms\n", result, (finish-start) / testCount);
 
            maxN *= 10;
        }
    }
 
    public static int calc() {
        int result = 0;
        for (int i = 0; i < maxN; i++) {
            result += i;
        }
        return result;
    }
 
    public static int calcRecursive(int i) {
        if (i < maxN) {
            return i + calcRecursive(i + 1);
        } else {
            return 0;
        }
    }
}

Результаты:
Кликните здесь для просмотра всего текста
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
     maxN = 1
Calc          result =  0        0,000160 ms
CalcRecursive result =  0        0,000080 ms
     maxN = 10
Calc          result =  45        0,000130 ms
CalcRecursive result =  45        0,000190 ms
     maxN = 100
Calc          result =  4950        0,000230 ms
CalcRecursive result =  4950        0,001150 ms
     maxN = 1000
Calc          result =  499500        0,001340 ms
CalcRecursive result =  499500        0,012990 ms
     maxN = 10000
Calc          result =  49995000        0,017450 ms
CalcRecursive result =  49995000        0,119320 ms

Ну и для 100000 рекурсия у меня падает со StackOverflowError, а цикл нормально вычисляется.

Некоторые алгоритмы проще с помощью рекурсии реализовать, но так чтоб она всегда работала быстрее - нет.
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
05.10.2017, 21:19
Цитата Сообщение от Kukstyler Посмотреть сообщение
Рекурсия создаёт в памяти отдельную копию функции для каждой итерации (естественно, вместе со своими переменными). А это требует немало "лишних" операций с памятью. Если цикл не нагромождён уймой ненужных переменных и алгоритм выбран оптимальный, то он должен быть де факто быстрее рекурсии.
Не всё так просто. Если используются исключительно примитивы, например, но память выделяется на стэке, что довольно быстро. В цикле же будет использоваться операция присваивания, т.е. измения значения ячейки памяти, которая может быть в каких-то случаях может быть менее эффективна, чем создание нового кадра стэка. В общем, всё совсем не так просто и без бенчмарков тут рассуждать вообще не о чем. Которые ещё правильно нужно написать. И не забывать про разницу в архитектурах процессоров.
0
 Аватар для Kukstyler
1260 / 870 / 268
Регистрация: 02.04.2009
Сообщений: 3,307
05.10.2017, 23:03
Цитата Сообщение от korvin_ Посмотреть сообщение
В цикле же будет использоваться операция присваивания
Так она же точно так-же будет использоваться для новых копий переменных, созданных в рекурсии (помимо выделения памяти на стэке).
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
06.10.2017, 19:23
Цитата Сообщение от Kukstyler Посмотреть сообщение
Так она же точно так-же будет использоваться для новых копий переменных, созданных в рекурсии (помимо выделения памяти на стэке).
Не совсем, это несколько разные вещи.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.10.2017, 19:23

сегодня так можно сказать праздник так что...
простите меня за все пожалуйста!!!

Что в коде ни так? while не работает так, как ожидаю
Написанный код, как я думаю, должен выдавать цифры от 0 до 1000, столбиком. Но выдает начиная от 702 до 1000. Что ни так понимаю, где...

Что не так, почему так происходит?
Вот bat файл @echo off for /f %%A in ('wmic path Win32_NetworkAdapter where &quot;PNPDeviceID like '%%VID_22C3&amp;PID_55FF%%'&quot; get Index...

Что-то не то с Майкрсофт визуал студио 2010 или я что-то не так делаю
Дело в том что при запуске вот этой программы: #include &lt;iostream&gt; using namespace std; int main () { for (int i=100; i&lt;=999;...

Посмотрите конфиг. скажите что не так или что стоит заменить?
http://kostroma.dns-shop.ru/catalog/cart/?cart_items=138239-1,143321-1,126014-1,157910-1,158182-1,126320-1,117954-1 скажите что не так или...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
34
Ответ Создать тему
Новые блоги и статьи
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации: 1. Вернуть возможность использования знаков | 1 l I;. . .
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С. Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию? Фраза «Любая достаточно развитая технология неотличима от магии». . .
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль? Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология. «Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
Генератор паролей (вариант №2)
Maks 30.10.2026
Обновленная версия ранее созданной обработки. Добавлены следующие реквизиты типа Булево: - Буквы; - Цифры; - Символы. Изменена логика команды "Сгенерировать" и процедуры "ПриОткрытии":. . .
Генератор паролей (вариант №1)
Maks 29.10.2026
Реализация из решения ниже выполнена исключительно по моей инициативе, дабы облегчить себе работу в создании паролей для администрируемых мною сервисов и пользователей. Самым главным критерием для. . .
Установка ChatGPT (Codex) на Windows без использования Microsoft Store
Fabien159 28.10.2026
Здравствуйте всем читающим! Опишу процесс установки ChatGPT (Codex) на Windows, если по каким-то причинам у вас не получается устанавить его через Microsoft Store. И так: 1. Скачиваем с. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru