|
Помогите с рекурсивной функцией | ☑ | ||
---|---|---|---|---|
0
ACiD30rus
08.11.11
✎
12:26
|
Привет. Подскажите как выкрутиться?!!...
Функция ВывестиСлова(Массив, Индекс) Для Сч=1 По СтрДлина(Массив[Индекс]) Цикл Переменная = Сред(Массив[Индекс], Сч, 1); Возврат (Строка(Переменная) + Строка(ВывестиСлова(Массив, Индекс+1, Уровней))); КонецЦикла; КонецФункции Т.е. при вызове этой функции возвращается только самый первый результат, а остальные не возвращаются, хотя возврат производится в цикле... Как быть, чтобы возвращались все возможные результаты? Как добиться продолжения выполнения после возврата или как изменить/переделать рекурсию чтобы возвращились все возможные значения? |
|||
1
Wobland
08.11.11
✎
12:27
|
это работает? где выход из рекурсии? почему параметров то два, то три?
|
|||
2
Reset
08.11.11
✎
12:28
|
(0) Опиши задачу, а не (заведомо неверное) решение не известно чего
|
|||
3
Reset
08.11.11
✎
12:29
|
в (0) код неверный тупо синтаксически
|
|||
4
ACiD30rus
08.11.11
✎
12:37
|
Поступает массив, каждый элемент которого состоит из слова. Скажем в нашем случае Массив(йцу,фыв), где йцу-Массив[0],фыв-Массив[1]. После выполнения этой функции на выход должно выводиться йф,йы,йв,цф,цы,цв,уф,уы,ув. А у меня выходит только самый первый результат йф.
|
|||
5
Wobland
08.11.11
✎
12:38
|
(4) ты синтакчисеский контроль делал вообще? выходит у него...
|
|||
6
Не Печенкин
08.11.11
✎
12:39
|
>>После выполнения этой функции на выход должно выводиться йф,йы,йв,цф,цы,цв,уф,уы,ув
Выводиться простите что? Строка, массив? Функция в 1С способна вернуть только одно значение |
|||
7
Wobland
08.11.11
✎
12:40
|
(6) например, массив
|
|||
8
Не Печенкин
08.11.11
✎
12:40
|
(7) хотелось бы у автора узнать, ну так и пусть выводит массив
|
|||
9
ACiD30rus
08.11.11
✎
12:43
|
синтаксически все нормально.
я хотел узнать возможно ли вернуть из рекурсии все возможные варинты или она вернет только один вариант - самый первый? |
|||
10
Wobland
08.11.11
✎
12:44
|
(9) скрин с текстом "Синтаксических ошибок не обнаружено!" в студию!
|
|||
11
Не Печенкин
08.11.11
✎
12:45
|
(9) чукча writer only?
|
|||
12
ACiD30rus
08.11.11
✎
12:49
|
http://s1.ipicture.ru/uploads/20111108/Sr5RNMWT.jpg
написал же, что ошибся с кодом малость пока его сюда вставлял Функция ВывестиСлова(Массив, Индекс) Для Сч=1 По СтрДлина(Массив[Индекс]) Цикл Переменная = Сред(Массив[Индекс], Сч, 1); Возврат (Строка(Переменная) + Строка(ВывестиСлова(Массив, Индекс+1))); КонецЦикла; КонецФункции |
|||
13
Не Печенкин
08.11.11
✎
12:51
|
(12) ты скажешь в виде чего тебе надо вывести результат?
|
|||
14
Wobland
08.11.11
✎
12:51
|
(12) ну а теперь рассказывай, что нужно
|
|||
15
Wobland
08.11.11
✎
12:51
|
(12) "написал же, что ошибся с кодом" - ложь
|
|||
16
ACiD30rus
08.11.11
✎
12:54
|
Не Печенькин, вывожу для проверки результат через Сообщить();
Т.е. в коде у меня выводится так: Сообщить(ВывестиСлова(НашМассив, 0)); |
|||
17
Asmody
08.11.11
✎
12:54
|
там же на скрине написано "Конфигуратор - Курсовая". Что пристали к человеку?
|
|||
18
Шапокляк
08.11.11
✎
12:59
|
(16) А переменная Сч случайно не объявлена в модуле? Сверху на скрине не видно.
|
|||
19
Asmody
08.11.11
✎
13:00
|
прочитав три раза (4), я, кажись, понял, чего автор хочет.
у него есть набор слов, надо вывести все слова, составленные из букв этих слов. причём на первом месте должны стоять буквы из первого слова, на втором — из второго, и т.д. только зачем тут рекурсия? достаточно 2-х вложенных циклов |
|||
20
Escander
08.11.11
✎
13:01
|
(0) в чём вопрос? Вызвал функцию, в функции попал в цикл и внутри цикла команда возврата из функции. уберите цикл-конеццикла, результат будет тем-же. Программа отрабатывает в точности как вы ей сказали сделать!
|
|||
21
Escander
08.11.11
✎
13:03
|
(19) да, вложеные циклы... можно и 1 циклом справиться, но фактически никакого выигрыша не будет а даже наоборот.
|
|||
22
kabanoff
08.11.11
✎
13:04
|
(12) А зачем для этого чудо-алгоритма использовать объект метаданных "Документ"? О_о
|
|||
23
Не Печенкин
08.11.11
✎
13:15
|
Процедура КнопкаВыполнитьНажатие(Кнопка)
Тест = Новый Массив(); Тест.Добавить("йцу"); Тест.Добавить("фыв"); Для каждого Эл Из ВывестиСлова(Тест) Цикл Сообщить(Эл); КонецЦикла; КонецПроцедуры Функция ВывестиСлова(Массив,Индекс=0) Если Индекс=Массив.ВГраница() Тогда НовыйМассив = Новый Массив; НовыйМассив.Добавить(""); Иначе НовыйМассив = ВывестиСлова(Массив,Индекс+1); КонецЕсли; Результат = Новый Массив; Для й=1 По СтрДлина(Массив[Индекс]) Цикл Для каждого Эл Из НовыйМассив Цикл Результат.Добавить(Сред(Массив[Индекс],й,1)+Эл); КонецЦикла; КонецЦикла; Возврат Результат; КонецФункции |
|||
24
ACiD30rus
08.11.11
✎
16:54
|
(23)Спасибо. Можно сказать только начинают кодить на эсине, поэтому недогнал как реализовать...
|
|||
25
Kookish
08.11.11
✎
17:20
|
Возврат в цикле... Свежо, нестандартно. Пятнично.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |