Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.05.2010, 20:45   #1
McJordan
Заблокирован
 
Регистрация: 14.05.2010
Сообщений: 11
По умолчанию Рекурсия и опережающее описание

Здравствуйте. Надо решить программу в Pascall методом Рекурсии и опережающее описание

"Дано действительное число а, натуральное число k. Не пользуясь стандартной операцией возведения в степень, найти аk."

Заранее спасибо

Последний раз редактировалось McJordan; 14.05.2010 в 20:48. Причина: недописал
McJordan вне форума Ответить с цитированием
Старый 14.05.2010, 21:26   #2
Z1000000
Форумчанин
 
Регистрация: 04.05.2010
Сообщений: 495
По умолчанию

Зачем здесь рекурсия? Алгоритм работает в одну сторону , возвращаться не нужно.

Код:
i:=1;
M:=1;
while (i<k+1) do
 begin
 M:=M*a;
 end;
writeln (a);
Нажми на весы, поставь +
Для благодарностей : WebMoney WMR R252732729948
Z1000000 вне форума Ответить с цитированием
Старый 14.05.2010, 22:07   #3
McJordan
Заблокирован
 
Регистрация: 14.05.2010
Сообщений: 11
Хорошо

Цитата:
Сообщение от Z1000000 Посмотреть сообщение
Зачем здесь рекурсия? Алгоритм работает в одну сторону , возвращаться не нужно.

Код:
i:=1;
M:=1;
while (i<k+1) do
 begin
 M:=M*a;
 end;
writeln (a);
ты это не мне спрашивай а того кто составлял эти задачи
McJordan вне форума Ответить с цитированием
Старый 16.05.2010, 00:41   #4
sabbathist
Пользователь
 
Регистрация: 23.07.2009
Сообщений: 66
По умолчанию

Я так понял, вас просят реализовать возведение в степень за O(logN), где N это степень. Делается это следующим образом:
1. Составляется реккурентное соотношение:
F(n)=F(n/2)*F(n/2) при n%2=0;
F(n)=F(n-1)*a (где а - число, которое возводим в степень) при n%2=1
F(0)=1

2. Пишете по нему рекурсию:
это уже за вами.
O(n)
sabbathist вне форума Ответить с цитированием
Старый 17.08.2010, 19:28   #5
aaaaaa
Новичок
Джуниор
 
Регистрация: 11.04.2009
Сообщений: 1
По умолчанию

Код:
var
  a: real;
  k: integer;

function Step(a: real; k: integer): real;
begin
  if k>0 then
    Step:=a*Step(a,k-1)
  else
    Step:=1;
end;

begin
  Write('Vvedite (a,k): ');
  Readln(a,k);
  Writeln(Step(a,k):0:9);
  Readln;
end.

Последний раз редактировалось aaaaaa; 18.08.2010 в 11:39. Причина: Внес исправления
aaaaaa вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Описание к программе May7768 Помощь студентам 0 12.05.2010 17:52
описание к коду! vetalij Общие вопросы C/C++ 3 02.03.2010 01:38
Описание класса. frem-dag Общие вопросы C/C++ 4 11.01.2010 19:53
Описание массива ddima Помощь студентам 5 28.12.2009 17:05
Описание процедуры phantom4eg Помощь студентам 6 17.03.2009 18:55