Задача по 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, время: 21:31. |