PashPP, а прокомментируйте пожалуйста вот эту часть кода
13 if (kol2 > num){ 14 Num(num, kol, min); 15 return; 16 } |
leny,
если при создании случайных чисел их сумма больше максимального то функция заново выполняется с начальными аргументами и первая функция останавливается for (var i = 0; i < kol; i++){ ar[i] = min + Math.round(Math.random() * obh); kol2 += ar[i]; // сумма всех псевдо-случайных чисел } if (kol2 > num){ //если сумма всех псевдо-случайных чисел Num(num, kol, min);//функция вызывается с данными аргументами return;// а так как в данной уже нет надобности её останавливаем } |
Цитата:
Может вы знаете где ошибка? |
leny,
проблема в том что происходит зависание из-за частого срабатывания if-a - слишком мала вероятность правильного выпадания псевдо-случайных чисел if (kol2 > num){ //если сумма всех псевдо-случайных чисел Num(num, kol, min);//функция вызывается с данными аргументами return;// а так как в данной уже нет надобности её останавливаем } |
Цитата:
|
Цитата:
|
leny,
действительно - лучше использовать метод oneguy - плюсы +более рандомный +обходит данное препятствие |
Обновил 2-ой алгоритм. Теперь число попадает с первого раза, его не приходится перегенерировать, что делает этот алгоритм быстрее и стабильнее.
|
Цитата:
|
Maxmaxmахimus,
по идее число комбинаций целочисленных делителей ограничено В идеале один раз рандомно выбирать из этого массива всех комбинаций |
Часовой пояс GMT +3, время: 19:31. |