Задача по JS
Здравствуйте. Возникли небольшие проблемы с программой.
Напишите функцию, аргументом которой является натуральное число n, а результатом - функция, которая последовательно возвращает все возможные массивы натуральных чисел, сумма которых равна n. После перебора функция должна вернуть null В книге Шеня нашел алгоритм, прочитал, попробовал написать программу Считает неверно. |
http://www.proklondike.com/var/file/...my_Zadachi.rar
:) А. Шень: Программирование: теоремы и задачи Если алгоритм отсюда = то укажите страницу и раздел. |
Цитата:
function createPartitionIterator ( integer ) { if ( !isFinite( integer = +integer ) || integer < 1 || integer != integer ^ 0 ) { return null; } var layout = [ integer ]; return function () { if ( !layout ) { return null; } var result, rest, last, offset = layout.length; while ( offset-- && layout[ offset ] == 1 ) {} if ( offset >= 0 ) { result = [].concat( layout ); rest = layout.length - offset; last = --layout[ offset++ ]; while ( rest > last ) { layout[ offset++ ] = last; rest -= last; } layout[ offset++ ] = rest; layout.length = offset; } else { result = layout; layout = null; } return result; } } function test ( integer ) { var text = ''; var next = createPartitionIterator( integer ); var layout; while ( layout = next() ) { text += layout + '\n'; } alert( text ); } test( 2 ); test( 5 ); test( 7 ); test( 10 ); |
2.4.1
|
Раздел 2.4.1
|
Вау. Написали Вы, конечно, классно, только малопонятно(
|
Цитата:
function createCompositionIterator ( integer ) { if ( !isFinite( integer = +integer ) || integer < 1 || integer != integer ^ 0 ) { return null; } var layout = Math.pow( 2, integer - 1 ); return function () { if ( !layout ) { return null; } layout--; var result = [], bitmap = layout, last = 1, left = integer; while ( left-- ) { if ( bitmap % 2 ) { last++; bitmap--; } else { result.unshift( last ); last = 1; } bitmap /= 2; } return result; } } function test ( integer ) { var text = ''; var next = createCompositionIterator( integer ); var layout; while ( layout = next() ) { text += layout + '\n'; } alert( text ); } test( 3 ); test( 4 ); test( 5 ); test( 6 ); |
Цитата:
|
Цитата:
while (!stopCondition(X0, X1)) { F1 = F(X1) - Y; F0 = F(X0) - Y; DELTA_X = X1 - X0; DELTA_F = F1 - F0; cache = X1; X1 = X1 - F1 * DELTA_X / DELTA_F; X0 = cache; } отрывок моего кода. см. метод хорд тело цикла - эта формула ![]() условие остановки (stopCondition) : ![]() по-моему, всё понятно :) простите, вредничаю ) |
Часовой пояс GMT +3, время: 23:33. |