Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Fibonacci chisla rekursivnaya procedura / 4 сообщений из 4, страница 1 из 1
12.11.2006, 15:20
    #34121964
andy_bu
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Fibonacci chisla rekursivnaya procedura
Nado napisat° recursivnuu proceduru, kotoraya vichislyaet i-e chislo Fibonacci.



Create procedure recfib(in i integer, out fib bigint)


begin
declare temp1 bigint;
declare temp2 bigint;
if i <= 1 then set fib = i;
else set temp1 = call recfib(i-1,?);
set temp2 = call recfib(i-2,?);
set fib = temp1 + temp2;
end if;
end



etot kod vidaet sleduushuy oshibku:



Create stored procedure returns SQLCODE: -418, SQLSTATE: 42610
A statement contains a use of a parameter marker that is not volid.
Deploy for debag failed.




Pomogite pozhaluysta.
...
Рейтинг: 0 / 0
13.11.2006, 10:14
    #34122913
SunnyVa
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Fibonacci chisla rekursivnaya procedura
мне кажется, что i-ое число Фибоначчи лучше вычеслять, используя не рекурсию, а цикл...

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
CREATE PROCEDURE RECFIB(IN i integer, OUT fib bigint)
P1 : BEGIN

DECLARE T1 BIGINT;
DECLARE T2 BIGINT;
DECLARE K INTEGER;

IF i <=  0  THEN
SET FIB =  0  ;
END IF ;

IF I =  1  THEN
SET FIB =  1  ;
END IF ;

SET T1 =  0  ; /* 1-ое число Фибоначчи*/
SET T2 =  1  ; /* 2-ое число Фибоначчи*/

IF I >  1  THEN
SET K =  1  ;
WHILE K < I DO

SET FIB = T1 + T2 ; /* i-ое число Фибоначчи*/

SET T1 = T2 ;
SET T2 = FIB ;

SET K = K +  1  ;
END WHILE ;

END IF ;

END P1 

а поскольку на мой взгляд лучше цикл, то тогда целесообразнее написать функцию...
...
Рейтинг: 0 / 0
13.11.2006, 12:58
    #34123630
Mark Barinstein
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Fibonacci chisla rekursivnaya procedura
А может, просто запросом?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
with t (n, v, vp) as 
(
values ( 2 ,  2 ,  1 )
 union all
select n+ 1 , v+vp, v
from t
where n<cast(? as int)
)
select v
from 
(
select n, v
from t
  union all
values ( 1 ,  1 )
) a (n, v)
where n=cast(? as int);
Поставьте вместо ?-ов нужный номер числа.
...
Рейтинг: 0 / 0
13.11.2006, 14:40
    #34124020
chro
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Fibonacci chisla rekursivnaya procedura
на правах флуда
еще мне в школе говорили, что если возвести в n степень матрицу ((1 1)(1 0) )
и взять число слева сверху, то сложность будет логарифмическая, а не линейная. Есть еще формула с корнями золотого сечения.
...
Рейтинг: 0 / 0
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Fibonacci chisla rekursivnaya procedura / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]