![]() |
|
|
Регистрация | << Правила форума >> | 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
|
|||
|
|||
![]() Мне нужна процедура......
![]() ![]() ![]() |