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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.12.2009, 16:21   #1
Asira
Пользователь
 
Регистрация: 12.12.2009
Сообщений: 84
По умолчанию Рекурсивная процедура

Почему рекурсия работает не правильно??
она должна сосчитать выражение 1 + 2*2 + 4*4 +7*7 +11*11 .....
Код:
procedure summa1(n:real;var s:real);
begin
if n=1 then s:=1
else
   begin  summa1(n-1,s);
    s:=s+ (1 + n * (n - 1) / 2)*(1 + n * (n - 1) / 2);
         end;
end;
Asira вне форума Ответить с цитированием
Старый 23.12.2009, 19:54   #2
Alex_FF
Удален
Форумчанин
 
Регистрация: 02.12.2009
Сообщений: 309
По умолчанию

Код:
function Sum(N: Integer): Integer;
begin
    if N = 1 then
        Sum := 1
    else
        Sum := (1 + N * (N - 1) div 2) * (1 + N * (N - 1) div 2) + Sum(N - 1);
end;

var
   N: Integer;
begin
    ReadLn(N);
    WriteLn(Sum(N));
    ReadLn;
end.

Последний раз редактировалось Alex_FF; 23.12.2009 в 20:02.
Alex_FF вне форума Ответить с цитированием
Старый 23.12.2009, 20:02   #3
Asira
Пользователь
 
Регистрация: 12.12.2009
Сообщений: 84
По умолчанию

n - число членов
s - сумма
Asira вне форума Ответить с цитированием
Старый 23.12.2009, 20:13   #4
Asira
Пользователь
 
Регистрация: 12.12.2009
Сообщений: 84
По умолчанию

Мне процедура нужна.
Asira вне форума Ответить с цитированием
Старый 23.12.2009, 20:55   #5
spl1nter
Пользователь
 
Регистрация: 17.11.2009
Сообщений: 14
По умолчанию

А что неправильно то? До 4го члена все считает как надо. Переменная s должна быть глобальной..
spl1nter вне форума Ответить с цитированием
Старый 23.12.2009, 20:57   #6
Asira
Пользователь
 
Регистрация: 12.12.2009
Сообщений: 84
По умолчанию

У меня считает не правильно всё время идёт вывод 1!!!!!!!
Asira вне форума Ответить с цитированием
Старый 23.12.2009, 21:03   #7
spl1nter
Пользователь
 
Регистрация: 17.11.2009
Сообщений: 14
По умолчанию

Код:
 
procedure summa1(n:real;var s:real);
begin
if n=1 then s:=s+1
else
   begin
     s:=s+ (1 + n * (n - 1) / 2)*(1 + n * (n - 1) / 2);
     summa1(n-1,s);
   end;
А так?
spl1nter вне форума Ответить с цитированием
Старый 23.12.2009, 21:13   #8
Asira
Пользователь
 
Регистрация: 12.12.2009
Сообщений: 84
По умолчанию

НЕ правильно(((
Asira вне форума Ответить с цитированием
Старый 23.12.2009, 21:17   #9
Alex_FF
Удален
Форумчанин
 
Регистрация: 02.12.2009
Сообщений: 309
По умолчанию

Код:
var
   S: Integer;

procedure Sum(N: Integer);
begin
    if N = 0 then Exit;
    S := S + (1 + N * (N - 1) div 2) * (1 + N * (N - 1) div 2);
    Sum(N - 1);
end;

var
   N: Integer;
begin
    ReadLn(N);
    S := 0;
    Sum(N);
    WriteLn(S);
    ReadLn;
end.

Последний раз редактировалось Alex_FF; 23.12.2009 в 21:43.
Alex_FF вне форума Ответить с цитированием
Старый 23.12.2009, 21:37   #10
Asira
Пользователь
 
Регистрация: 12.12.2009
Сообщений: 84
По умолчанию

и в таком варианте она работает не правильно постоянно выводит 1
Код:
procedure summa1(n:integer);
  var s:real;
begin
if n=0 then  Exit;
 s:=s+ (1 + n * (n - 1) div 2)*(1 + n * (n - 1) div  2);  summa1(n-1);
end;
Asira вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Си++. Рекурсивная функция. Diamond2107 Помощь студентам 6 02.12.2009 19:48
Задача (рекурсивная) Witaliy Паскаль, Turbo Pascal, PascalABC.NET 2 21.01.2009 06:18