рекурсия

  • Автор темы Nemets
  • Дата начала
Статус
Закрыто для дальнейших ответов.
N

Nemets

#1
я понимаю, что здесь обсуждаються очень серьезные темы в программирований, но я сталкнулся с проблемой...для вас она наверное покажеться очень простой.
есть выражение s(n)=sqrt(1+sqrt(2+sqrt(3+sqrt(4+...sqrt(n)))));
как его посчитать через рекурсию.... млин, вродь не тупой, но часа 2 втыкал в эту строчку... - ниче не получилось... за рание спасибо
 
G

Guest

#2
Имхо никак. Нормальная рекурсия используется, если можно 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+:), но я таких не помню. Если это действительно учебная задача, то сочувствую - препод, видимо, но понимая сути рекурсии, придумал задачу :)
 
G

Guest

#3
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. И все равно это не рекурсия, а спрятанный перебор массива :)
 
N

Nemets

#4
я не могу нормально вызвать процедуру. напиши пример вызова в delphi 7 с n=10. спасибо
 
N

Nemets

#5
с напиши тоже только на delphi. и если это не рекурсия, то бдет очень прикольно. я, доказывая это, чуть препода не послал.
 
G

Guest

#6
Код:
int k=0; 
double d=0;
Recurs(10, k, d);
Только исправь код зубра как выше показано.
 
G

Guest

#7
Ну насчет послать это ты погорячился :) Но в принципе это просто спрятанный цикл, а не рекурсия.
 
N

Nemets

#10
пишет, что тип актуальных и формальных параметров должен быть одинаковый.
 
N

Nemets

#11
немного подправил. но она просто не считает. послушай, был бы очень признателен, если бы ты смог кинуть exe скомпилированной проги на мыло. мне нужно что бы можно было посчитать эту фигню (s(n)) через рекурсию и без неё. что бы результаты ыводились отдельно и в программе можно было указывать n :)
 
G

Guest

#12
второй и третий параметр должна быть переменная, а не число.
 
N

Nemets

#15
и все равно она не считает. после выполнения s=0 :)

и я не против что бы ты собрал мне её на vс++
 
G

Guest

#16
ты код исправил? или просто зубровский взял? Если тебе нужна просто программка, выводящая 2 одинаковых значения, напиши ее, дважды выводя результат по циклу :)
 
Z
#17
Нет все таки можно, вот код:
Код:
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
 
Z
#18
Вот код программки:
Код:
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.
 
Статус
Закрыто для дальнейших ответов.