![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
Amro |
![]()
Сообщение
#1
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 146 Пол: Мужской Репутация: ![]() ![]() ![]() |
Люди объясните пожалуйста что такое рекурсия.... Мне надо программку написать использую рекурсивную функцию, а почитать про саму рекурсию у меня нету ничего.... В общем вот условие:
"Написать программу, определяющую из скольки цифр состоит данное натуральное число" Вот как я её написал, но по-моему это не рекурсия!! Объясните пожалуйста как её переделать(если она не правильна)!!!............. Код program lab6; uses crt; var m:longint; q:char; function KOL(n:longint):word; var k:word; begin k:=0; if n=0 then begin k:=1; kol:=k; end; while (n<>0) do begin n:=n div 10; inc(k); KOL:=k; end; end; begin repeat clrscr; writeln('введите натуральное число'); readln(m); writeln('число ',m,' состоит из ', KOL(m),' цифр'); write('Вычислить еще ?(Y/N)'); q:=ReadKey; until not (q in ['Y','y']); end. -------------------- Закон иудеев: Семь раз отмерь, один отрежь.
Закон экономии: Семь раз отмерь, семь раз отрежь. Закон программиста: Семь раз отрежь, ошибся, отмерь. |
![]() ![]() |
Amro |
![]()
Сообщение
#2
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 146 Пол: Мужской Репутация: ![]() ![]() ![]() |
Всё!!! что такое рекурсия я врубился!!! Но програмка настолько простая, что я не знаю, что из одной ф-ции перекинуть в другую!! Подскажите пожлста
![]() -------------------- Закон иудеев: Семь раз отмерь, один отрежь.
Закон экономии: Семь раз отмерь, семь раз отрежь. Закон программиста: Семь раз отрежь, ошибся, отмерь. |
trminator |
![]()
Сообщение
#3
|
Четыре квадратика ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 579 Пол: Мужской Репутация: ![]() ![]() ![]() |
Может быть неправильно, но...
Код function count(n: integer):integer; begin if n<10 then count:=1 else count:=1+count(n div 10) end; -------------------- Закон добровольного труда Зимерги:
Люди всегда согласны сделать работу, когда необходимость в этом уже отпала |
Amro |
![]()
Сообщение
#4
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 146 Пол: Мужской Репутация: ![]() ![]() ![]() |
Нет это чего-то не то!!! В общем в проге которуя я написал выше нужно из ф-ции
KOL перенести какие-то вычисления в другую ф-цию, т.е чтобы из одной функции (KOL) вызывалась другая ф-ция, но как я уже говорил, что не могу ничего из ф-ции KOL выкинуть, не писать же лишнее в программе(в другой ф-ции), ведь она так то работает правильно и всё вычисляет, а самой рекурсии в ней нет.... А что делать я не знаю ??? -------------------- Закон иудеев: Семь раз отмерь, один отрежь.
Закон экономии: Семь раз отмерь, семь раз отрежь. Закон программиста: Семь раз отрежь, ошибся, отмерь. |
trminator |
![]()
Сообщение
#5
|
Четыре квадратика ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 579 Пол: Мужской Репутация: ![]() ![]() ![]() |
А чего не нравится-то? Она рекурсивная, да еще и работает
![]() Логика: если число меньше 10, то в нем одна цифра. Иначе в нем цифр ровно на одну больше, чем в нем же, но без последней цифры -------------------- Закон добровольного труда Зимерги:
Люди всегда согласны сделать работу, когда необходимость в этом уже отпала |
Amro |
![]()
Сообщение
#6
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 146 Пол: Мужской Репутация: ![]() ![]() ![]() |
Извини не разобрался.... В общем рекурсия здесь заключается в том что ф-ция обращается сама к себе....Я правильно понял? Так конечно попрёт, но мне бы хотелось переделать свою прогу, хотя твоя самая компактная... Что можно ещё придумать?......
![]() -------------------- Закон иудеев: Семь раз отмерь, один отрежь.
Закон экономии: Семь раз отмерь, семь раз отрежь. Закон программиста: Семь раз отрежь, ошибся, отмерь. |
Amro |
![]()
Сообщение
#7
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 146 Пол: Мужской Репутация: ![]() ![]() ![]() |
Ладно всё класс!!! Для училки попрёт....
-------------------- Закон иудеев: Семь раз отмерь, один отрежь.
Закон экономии: Семь раз отмерь, семь раз отрежь. Закон программиста: Семь раз отрежь, ошибся, отмерь. |
trminator |
![]()
Сообщение
#8
|
Четыре квадратика ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 579 Пол: Мужской Репутация: ![]() ![]() ![]() |
Цитата рекурсия здесь заключается в том что ф-ция обращается сама к себе В этом суть рекурсии Цитата переделать свою прогу Вот что получится, если "развернуть" рекурсию в моей функции Код count:=1; while n>=10 do begin inc(count); n:=n div 10 end; А это почти то же самое, что и у тебя -------------------- Закон добровольного труда Зимерги:
Люди всегда согласны сделать работу, когда необходимость в этом уже отпала |
SKVOZNJAK |
![]()
Сообщение
#9
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 930 Пол: Мужской Репутация: ![]() ![]() ![]() |
Кстати, как там у твоей любимой учительницы, нервишки-то крепкие? ;)
Код program lab6; uses crt; var m:longint; q:char; function KOL(n:longint):word; var k,w:word; label 1,2,3; begin k:=0; if n=0 then begin k:=1; kol:=k; goto 2; end; w:=0; 1: for k:=w to w do begin n:=n div 10; inc(k); inc(w); if n>0 then goto 1 else goto 3; end; 3: KOL:=k; 2: end; begin repeat clrscr; writeln('введите натуральное число'); readln(m); writeln('число ',m,' состоит из ', KOL(m),' цифр'); write('Вычислить еще ?(Y/N)'); q:=ReadKey; until not (q in ['Y','y']); end. |
![]() ![]() |
![]() |
Текстовая версия | 25.06.2025 3:51 |