IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Рекурсия переполнение стека, Несоставимое число
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 37
Пол: Мужской
Реальное имя: Серёга

Репутация: -  0  +


Задан массив натуральных чисел P, содержащий n элементов. Найти минимальное натуральное число, которое нельзя представить суммой каких-либо элементов массива P. Сумма может состоять и из одного слагаемого, но каждый элемент массива может входить в неё только один раз. Составить рекурсивную программу.

Помогите пожалуйста, я пробовал решать но вылазит ошибка стек переполнен и не знаю как её исправить.


program eight;
var
a,b:array[1..20] of integer;
k,m,max,n,i,z:integer;

procedure massiv(m,k,max:integer);
begin
max:=a[1];
a[i]:=max;
m:=k-max;
max:=b[z];
end;

procedure reshenie(k,m,n:integer);
begin
for i:=1 to n do
if (k=a[i]) then inc(k);
if (a[i]<k) and (a[i]<>b[z]) then
massiv(m,k,max);
if (m=0) then inc(k);
if (m>k) and (a[i]<>b[z]) and (m<>0) then
writeln('nesostavimoe 4islo',k) else
reshenie(m,m,n);
end;

begin
writeln('ukazite dliny massiva');
readln(n);
writeln('Vvedite naturalnie 4isla');
for i:=1 to n do
readln(a[i]);
b[z]:=0;
for k:=1 to 100 do
for i:=1 to n do
reshenie(k,m,n);
readln;
end.


М
Про теги не надо забывать...
мисс_граффити

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


приведи, пожалуйста, для начала в порядок процедуру reshenie: расставь по-человечески отступы и операторные скобки begin/end.


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 37
Пол: Мужской
Реальное имя: Серёга

Репутация: -  0  +


незнаю так или не так расставил конечно .... а это разве влияет на работу программы?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






На работу нет, но вот на отладку - еще как влияет... Твой код очень плохо читается, не видно структуры программы..

Насколько я вижу, у тебя рекурсия будет зацикливаться с параметрами (0, 0, N), то есть, получив эти параметры, она вызовет себя же вновь с этими же параметрами... Процесс бесконечен, и остановится только при переполнении стека...

Ты сразу стал делать рекурсивную программу? Перед этим не попробовал сделать то же самое итеративно? Перенести работающую итерацию в рекурсию гораздо проще, чем писать рекурсию с нуля ...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


не так ты расставил.
begin/end - влияет на работу программы, разумеется.
отступы влияют на желание форумчан помочь. этого мало?

Добавлено через 2 мин.
насколько я вижу, к циклу относится только одна строка:
if (k=a[i]) then inc(k);

а чему дальше равно i - знаешь? однако используешь его значение более чем активно...


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Новичок
*

Группа: Пользователи
Сообщений: 37
Пол: Мужской
Реальное имя: Серёга

Репутация: -  0  +


Насчет редактировани: я пробовал отредактировать и расставить отступы, но при редактирование вылазит ошибка какая-то, но написано что всё изменено.

Если честно то итеративно я не пробовал её решить... А с чего ты взял что она зациклится на (0,0,N) число 0 он по идее вообще не должен проверять ....
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Гость






ЗАпусти и попробуй отладить... Отладчиком умеешь пользоваться?

Если не умеешь - смотри здесь: http://volvo71.narod.ru/full_debug.htm
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 29.03.2024 2:35
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name