计算斐波那契数列的前 N 项

斐波那契数列指的是这样一个数列:1123581321……

这个数列从第三项开始,每一项都等于前两项之和。

输出这个数列的前 N 项(N>2)。

定义一个序列,将前两项赋值为 1,然后循环 N-2次,分别取倒数第一项和倒数第二项,将其相加的和合并到序列中,结果即为所生成的斐波那契数列。

使用递推算法:


A

B

C

1

30

[1,1]


2

for A1-2

=B1.m(-1)+B1.m(-2)

>B1|=B2

http://try.scudata.com.cn/try.jsp?splx=ExA002jsfbnqsl1.splx

A1N值,B1中创建初始数列[1,1]

A2循环N-2次,B2计算序列中最后两项的和,C2将新值添加到原数列中。循环完成后,即可在B1中看到最终结果。

SPL中使用for循环,便于查看每一步的计算结果,用A.m(n)可以从序列中按位置取数,n为负值倒数;A =A|a可以很方便地在序列后添加成员。

也可以使用循环函数计算:


A

B

C

1

30

>a=0,b=1


2

=A1.(b=a+b,a=b-a)



http://try.scudata.com.cn/try.jsp?splx=ExA002jsfbnqsl2.splx

B1中定义计算所需参数的初始值a=0,b=1A2用循环函数依次计算数列中的N个值,每次计算时a+b得到新的b,用新的b减去a能得到b的原值作为当前数列中的值,同时将其赋值给a。执行后,在A2中能得到最终结果。

SPL中循环函数能用一个格子完成for循环中用多个格子甚至多行才能完成的计算,代码更简洁。使用逗号运算符a,b,…,会依次计算表达式a,b,…并返回最后一个结果。实际上,甚至可以把代码简化为一个表达式:=a=0,b=1,30.(b=a+b,a=b-a)


A

B

C

1

30


=fibonacci(A1)

2

func fibonacci(n)

if n < 3

return [1]*n

3


=fibonacci(n-1)

return B3|(B3.m(-1)+B3.m(-2))

http://try.scudata.com.cn/try.jsp?splx=ExA002jsfbnqsl3.splx

先看A2代码块中定义的子程序,子程序名称为fibonacci,使用一个参数n表示项数。在B2中判断,如果n小于3则按返回1组成的n项数列;n3时,先在B3中递归调用子程序,得到n-1项的斐波那契数列,在C3中再增加新的一项即可返回n项的结果。

C1中可以直接用=fibonacci(N)得到所需的结果。

SPL中,通过使用子程序,调用代码会非常简洁,特别是在子程序需要重复使用时。

使用上面的3种方法,得到的结果是相同的:

..