1. Спонсор публикаций Marketplace codeby. Сервис, который так долго ждали. При расчетах используем биткоин. Первый товар уже в продаже: Консультация на тему ИБ от Ondrik8

    Скрыть объявление
  2. Спонсор публикаций Marketplace codeby. Сервис, который так долго ждали. При расчетах используем биткоин. Второй товар маркетплейса: Надёжная обфускация вашей программы от PingVinich

    Скрыть объявление

рекурсия

Тема в разделе "Delphi - FAQ", создана пользователем Nemets, 11 май 2005.

Статус темы:
Закрыта.
  1. Nemets

    Nemets Гость

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

    Guest Гость

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

    Guest Гость

    Репутация:
    0
    zubr, респект, беру свои слова назад, только немного исправить:
    Код (Text):
    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. И все равно это не рекурсия, а спрятанный перебор массива :)
     
  4. Nemets

    Nemets Гость

    Репутация:
    0
    я не могу нормально вызвать процедуру. напиши пример вызова в delphi 7 с n=10. спасибо
     
  5. Nemets

    Nemets Гость

    Репутация:
    0
    с напиши тоже только на delphi. и если это не рекурсия, то бдет очень прикольно. я, доказывая это, чуть препода не послал.
     
  6. Guest

    Guest Гость

    Репутация:
    0
    Код (Text):
    int k=0;
    double d=0;
    Recurs(10, k, d);
    Только исправь код зубра как выше показано.
     
  7. Guest

    Guest Гость

    Репутация:
    0
    Ну насчет послать это ты погорячился :) Но в принципе это просто спрятанный цикл, а не рекурсия.
     
  8. Nemets

    Nemets Гость

    Репутация:
    0
    млин, она не вызываеться :)
     
  9. Guest

    Guest Гость

    Репутация:
    0
    а что говорит?
     
  10. Nemets

    Nemets Гость

    Репутация:
    0
    пишет, что тип актуальных и формальных параметров должен быть одинаковый.
     
  11. Nemets

    Nemets Гость

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

    Guest Гость

    Репутация:
    0
    второй и третий параметр должна быть переменная, а не число.
     
  13. Guest

    Guest Гость

    Репутация:
    0
    Ну извини, это к зубру. У меня даже дельфи нет :)
     
  14. Nemets

    Nemets Гость

    Репутация:
    0
    фигово. вощем, тема не закрыта :)
     
  15. Nemets

    Nemets Гость

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

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

    Guest Гость

    Репутация:
    0
    ты код исправил? или просто зубровский взял? Если тебе нужна просто программка, выводящая 2 одинаковых значения, напиши ее, дважды выводя результат по циклу :)
     
  17. zubr

    zubr Гость

    Репутация:
    0
    Нет все таки можно, вот код:
    Код (Text):
    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
     
  18. zubr

    zubr Гость

    Репутация:
    0
    Вот код программки:
    Код (Text):
    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.
     
  19. Nemets

    Nemets Гость

    Репутация:
    0
    спасибо. все работает.
     
Загрузка...
Похожие Темы - рекурсия
  1. Heavy10110
    Ответов:
    2
    Просмотров:
    154
  2. vera2014
    Ответов:
    0
    Просмотров:
    1.254
  3. 95процентов
    Ответов:
    7
    Просмотров:
    1.985
  4. 95процентов
    Ответов:
    0
    Просмотров:
    996
  5. 95процентов
    Ответов:
    0
    Просмотров:
    1.064
Статус темы:
Закрыта.

Поделиться этой страницей