Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: рекурсия
Форум программистов > Системное программирование > Delphi и Pascal > Delphi - FAQ
Nemets
я понимаю, что здесь обсуждаються очень серьезные темы в программирований, но я сталкнулся с проблемой...для вас она наверное покажеться очень простой.
есть выражение s(n)=sqrt(1+sqrt(2+sqrt(3+sqrt(4+...sqrt(n)))));
как его посчитать через рекурсию.... млин, вродь не тупой, но часа 2 втыкал в эту строчку... - ниче не получилось... за рание спасибо
Guest
Имхо никак. Нормальная рекурсия используется, если можно F(N) выразить через F(N+-1).
А у тебя -
F(1) = sqrt(1);
F(2) = sqrt(1 + sqrt(2))
F(3) = sqrt(1 + sqrt(2+sqrt(3))).

Значения никак не связаны. Может быть, если посмотреть какие разложения sqrt(a+cool.gif, но я таких не помню. Если это действительно учебная задача, то сочувствую - препод, видимо, но понимая сути рекурсии, придумал задачу smile.gif
Guest
zubr, респект, беру свои слова назад, только немного исправить:
void recurs(int n, int& k, double s)
{
if (k==0)
{
   s = sqrt(n);
   k= n;
   recurs(n, k, s);
}
else if (k>1)
{
   k--;
   s = sqrt(k + s);
   recurs(n, k, s);
}
}


PS. И все равно это не рекурсия, а спрятанный перебор массива smile.gif
Nemets
я не могу нормально вызвать процедуру. напиши пример вызова в delphi 7 с n=10. спасибо
Nemets
с напиши тоже только на delphi. и если это не рекурсия, то бдет очень прикольно. я, доказывая это, чуть препода не послал.
Guest
int k=0; 
double d=0;
Recurs(10, k, d);

Только исправь код зубра как выше показано.
Guest
Ну насчет послать это ты погорячился smile.gif Но в принципе это просто спрятанный цикл, а не рекурсия.
Nemets
млин, она не вызываеться smile.gif
Guest
а что говорит?
Nemets
пишет, что тип актуальных и формальных параметров должен быть одинаковый.
Nemets
немного подправил. но она просто не считает. послушай, был бы очень признателен, если бы ты смог кинуть exe скомпилированной проги на мыло. мне нужно что бы можно было посчитать эту фигню (s(n)) через рекурсию и без неё. что бы результаты ыводились отдельно и в программе можно было указывать n smile.gif
Guest
второй и третий параметр должна быть переменная, а не число.
Guest
Ну извини, это к зубру. У меня даже дельфи нет smile.gif
Nemets
фигово. вощем, тема не закрыта smile.gif
Nemets
и все равно она не считает. после выполнения s=0 smile.gif

и я не против что бы ты собрал мне её на vс++
Guest
ты код исправил? или просто зубровский взял? Если тебе нужна просто программка, выводящая 2 одинаковых значения, напиши ее, дважды выводя результат по циклу smile.gif
zubr
Нет все таки можно, вот код:
procedure Recurs(n:Integer; var k:Integer; var s:Double);
begin
If k=0 then
begin
 s:=sqrt(n);
 k:=n-1;
 If k>0 then
 Recurs(n, k, s);
end
else
begin
 If k>0 then
 begin
  s:=sqrt(k+s);
  k:=k-1;
  If k>0 then
  Recurs(n, k, s);
 end;
end;
end;

n - параметр функции, s - результат рекурсии, переменная k должна быть равна 0
zubr
Вот код программки:
program Project1;


procedure Recurs(n:Integer; var k:Integer; var s:Double);
begin
If k=0 then
begin
 s:=sqrt(n);
 k:=n-1;
 If k>0 then
 Recurs(n, k, s);
end
else
begin
 If k>0 then
 begin
  s:=sqrt(k+s);
  k:=k-1;
  If k>0 then
  Recurs(n, k, s);
 end;

end;
end;

var
 k, n:Integer;
 s:Double;

begin
k:=0;
s:=0;
Write('Vvedite n: ');
Readln(n);
Recurs(n, k, s);
Writeln(s);
Readln;
end.
Nemets
спасибо. все работает.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2008 IPS, Inc.