![]() |
|
|
Регистрация | << Правила форума >> | 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))); ... удачи) Нет повести печальнее на свете, чем повесть о заклиневшем Resete. ![]() |
#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 Велик и могуч наш Object Pascal ! ICQ: 357-591-887 |
#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; Велик и могуч наш Object Pascal ! ICQ: 357-591-887 |