рекурсионная возведение в степень, некак неполучается рекурсией |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
рекурсионная возведение в степень, некак неполучается рекурсией |
maksimla |
7.11.2009 18:24
Сообщение
#1
|
Знаток Группа: Пользователи Сообщений: 324 Пол: Мужской Реальное имя: maksim Репутация: 1 |
Иногда нужна пользоватся экономическим возведением в какуето степень. Чтобы использовать как менше множетелей операций функции надо использовать эти примечание
в скобках написано b четное число Написать программу которая реализировала экономочный число возведение в степень (с клавиатуры вводим натуральные числа n и m (0 < n ≤ 5, 0 < m ≤ 10), а на экране выводим n число в степени m). Нахождения степени должно быть выражено через рекурсированную функцию. Я написал программу простую с возведением в степень с процедурой и экономичным или экономическим вариантом но без рекурсии
а с рекурсированной функцией получается неправильно
может подскажете как надо делать -------------------- Учусь первый год на программиста в колледже. Учусь на втором курсе в школе программирования при научно-исследовательском институте математики и информатики.
|
volvo |
7.11.2009 18:46
Сообщение
#2
|
Гость |
Program ekokel; |
TarasBer |
7.11.2009 18:56
Сообщение
#3
|
Злостный любитель Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: 62 |
А что, возводить надо только в нечётную степень?
-------------------- |
maksimla |
7.11.2009 19:00
Сообщение
#4
|
Знаток Группа: Пользователи Сообщений: 324 Пол: Мужской Реальное имя: maksim Репутация: 1 |
если степень четная, то используем этот примечание,если степень нечетное, точда используем простой подсчет
Сообщение отредактировано: maksimla - 7.11.2009 19:08 -------------------- Учусь первый год на программиста в колледже. Учусь на втором курсе в школе программирования при научно-исследовательском институте математики и информатики.
|
volvo |
7.11.2009 19:11
Сообщение
#5
|
Гость |
Нет тут никакого переполнения:
function kel(n, m: longint): longint;, проверил со всеми передаваемыми значениями. Если число МОЖЕТ быть вычислено, и помещается в тип LongInt, выдается правильный результат. |
maksimla |
7.11.2009 19:49
Сообщение
#6
|
Знаток Группа: Пользователи Сообщений: 324 Пол: Мужской Реальное имя: maksim Репутация: 1 |
ясно спасибо но я немогу понять этого
if m = 0 then kel := 1 при воде 2 и 4 то тогда эта будит kel := 1но чегото ответ получается правильный непонятно Сообщение отредактировано: maksimla - 7.11.2009 19:50 -------------------- Учусь первый год на программиста в колледже. Учусь на втором курсе в школе программирования при научно-исследовательском институте математики и информатики.
|
volvo |
7.11.2009 20:16
Сообщение
#7
|
Гость |
Цитата но чегото ответ получается правильный непонятно На то она и рекурсия, чтобы не вычислять ответ сразу, а "собирать" его из кирпичиков, вычисленных на разных этапах.Смотри: N = 3, M = 4 сразу после вызова: M = 0? Нет... M = 1? Нет... Значит, идем по третьей ветке, рекурсивно вызываем kel(N, M - 2), в нашем случае kel(3, 2)... А потом, когда вернемся сюда - т.е., когда на каком-то витке рекурсии будет M = 0 или M = 1, и рекурсия начнет раскручиваться назад - результат, который она вернет, будет домножен на Sqr(n), то есть на N*N... Кстати, та моя реализация - не самая эффективная: для того, чтобы вычислить 310, надо 6 уровней рекурсии (чтобы проверить - можно сделать так: function kel(n, m: longint): longint;, и посчитать, сколько звездочек будет напечатано, каждая звездочка - новый уровень рекурсии). Вот такое решение: function kel(n, m: longint): longint; для вычисления 310 "забирается" всего на 4-ый уровень, то есть, более эффективно работает. |
Текстовая версия | 28.04.2024 10:28 |