![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Почему рекурсия работает не правильно??
она должна сосчитать выражение 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; |
|
#2
|
|||
|
|||
|
1. n лучше задать как Integer
2. А в чем неправильно-то? |
|
#3
|
|||
|
|||
|
Считает неправильно
![]() ![]() ![]() |
|
#4
|
||||
|
||||
|
повелитель реккурентных соотношений блин)
правильное: 1 + [ n(n-1)/2 ] * [ 2 + n(n-1)/2] Я чуток видоизменил код, так думаю понятнее Код:
function Func(N : Word) : Int64; begin Result := 1 + (N*(N - 1) div 2) * (2 + N*(N - 1) div 2) ; end; function CalculateSum(const N : Word) : Int64; begin if N >= 1 then Result := Func(N) + CalculateSum(N - 1) else Result := 0; end; Вот пример вызова: Код:
... ShowMessage(IntToStr(CalculateSum(3))); ... удачи) |
|
#5
|
|||
|
|||
|
1 + [ n(n-1)/2 ] * [ 2 + n(n-1)/2] не могу понять почему так???????????
|
|
#6
|
|||
|
|||
|
Мне нужна процедура......
![]() ![]() ![]() |
|
#7
|
||||
|
||||
|
Цитата:
И тут этот Asira... Уже 6-я тема за последние 3 дня. Такое впечатление что делаешь проги за деньги, вот только навыков отладки нехватает.Зарабатываем перед сессией? ![]() Последний раз редактировалось Konrad, 23.12.2009 в 22:10. |
|
#8
|
|||
|
|||
|
Если бы так............ я всё себе делаю.... просто в течение семестра ерундой страдал а сейчас решил заняться......... у меня вообще нету никаких навыков я ток 1 год учусь........ вот пытаюсь тут чему то научиться
Последний раз редактировалось Asira, 27.12.2009 в 18:16. |
|
#9
|
||||
|
||||
|
Цитата:
|
|
#10
|
|||
|
|||
|
Нет уж я хочу, могу и буду учиться на своих ошибках..... А свои ошибки порой бывает трудно найти, поэтому я обращаюсь за помощью на этот форум........... а зачем тогда вообще нужен будет ЭТОТ форум если все будут сидеть и додумываться сами???????????????
Толку бы не было если б я писал темы " Напишите за меня программу" .......... Вообщем меня не сможет понять человек который не был на моём месте...... Последний раз редактировалось Asira, 27.12.2009 в 18:17. |
|
#11
|
||||
|
||||
|
У тебя задание посчитать именно рекурсией или надо просто сосчитать ?
Например можно просто считать n-ые члены этой последовательности (1,4,16,49,121...) и складывать их. Код:
function Sum(n:integer):integer; var i:integer; begin Result := 1; for i:=2 to n do Result := Result + Sqr(1+( i*(i-1) div 2)); end; вот ссылка на саму последовательность: http://www.research.att.com/~njas/sequences/A086601 |
|
#12
|
|||
|
|||
|
обычную я сделал а с рекурсией тормоз....
Последний раз редактировалось Asira, 27.12.2009 в 18:17. |
|
#13
|
||||
|
||||
|
Код:
procedure summa1(n:integer; var s:integer); begin if n = 1 then s := 1 else begin summa1(n-1,s); s := s + Sqr(1+( n*(n-1) div 2)); end; end; |