我想知道是否有任何方法可以生成斐波那契数字,这个数字在简单和效率方面超过了我写的:
WITH d (seq) AS (SELECT LEVEL FROM DUAL CONNECT BY LEVEL < 195) SELECT seq,fib FROM d MODEL DIMENSION BY(seq) MEASURES(0 AS fib) RULES (fib [1] = 0,fib [2] = 1,fib [seq BETWEEN 3 AND 194] = fib[CV(seq) - 2] + fib[CV(seq) - 1],fib [seq > 194] = NULL) ORDER BY 1 / Execution Plan ---------------------------------------------------------- Plan hash value: 2245903385 --------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | Cost (%cpu)| Time | --------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1 | 13 | 2 (0)| 00:00:01 | | 1 | sql MODEL ORDERED | | 1 | 13 | | | | 2 | VIEW | | 1 | 13 | 2 (0)| 00:00:01 | |* 3 | CONNECT BY WITHOUT FILTERING| | | | | | | 4 | FAST DUAL | | 1 | | 2 (0)| 00:00:01 | --------------------------------------------------------------------------------------- Predicate information (identified by operation id): --------------------------------------------------- 3 - filter(LEVEL<195) Statistics ---------------------------------------------------------- 0 recursive calls 0 db block gets 0 consistent gets 0 physical reads 0 redo size 4798 bytes sent via sql*Net to client 500 bytes received via sql*Net from client 14 sql*Net roundtrips to/from client 1 sorts (memory) 0 sorts (disk) 194 rows processed sql>
注意:LEVEL< 195不是任意选择的,较高的值会使算法失去精度,因此我决定不包括它们以便仅保留正确的结果.