用R语言表现斐波那契数列 前12项的命令

Python014

用R语言表现斐波那契数列 前12项的命令,第1张

# Rec

fibonacci<-function(i)

{

if(i==1||i==2)

return (1)

return (fibonacci(i-1)+fibonacci(i-2))

}

for(i in 1:12)

{

print(fibonacci(i))

}

# loop

a=1

b=1

for(idx in 1:12)

{

print(a)

c=a+b

a=b

b=c

}

Option Explicit

Dim X() As Long

Sub Fun(ByRef A() As Long)

Dim J As Integer

X(1) = 1

X(2) = X(1)

For J = 3 To UBound(A)

X(J) = X(J - 1) + X(J - 2)

Next J

End Sub

Private Sub Form_Load()

Dim I As Integer, n As Integer

Form1.AutoRedraw = True

Do

n = Val(InputBox("请输入数列的项数(n>2)"))

Loop Until n >2

ReDim X(1 To n)

Fun X()

For I = 1 To n

Print X(I),

If I Mod 5 = 0 Then Print

Next I

Print

End Sub

斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”。

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

0、1、1、2、3、5、8、13、21、34……

有一组数列,它的第一项为1,第二项为1,从第三项开始,每一项为前两项之和。

斐波那契数列的第n项Fn可以通过如下的递归公式定义:

F(1)=1,F(2)=1,

F(n)=F(n-1)+F(n-2)(n ≥ 3,n ∈ N*)

通项公式

如上,又称为“比内公式”,是用无理数表示有理数的一个范例。

注:此时a1=1,a2=1,a(n)=a(n-1)+a(n-2),(n ≥ 3,n ∈ N*)

求第n项斐波那契数

现在写一个函数int fib(int n) 返回第n项Fn。例如,若n=0,则函数fib(0)应该返回0,若n=1, 则函数fib(1)应返回1,若 n >1,返回 F(n-1)+F(n-2)。

若n = 9

输出:34

下面是返回斐波那契数列第n项Fn的不同方法:

方法1 (使用递归)

一个简捷的方法是直接使用递归定义关系式写出递归实现的代码,C/C++代码如下:

//Fibonacci Series using Recursion

#include<stdio.h>

int fib(int n) {

if (n <= 1)

return n

return fib(n - 1) + fib(n - 2)

}

int main() {

int n = 9

printf("%d", fib(n))

return 0

}

输出:34

时间复杂度:T(n) = T(n-1) + T(n-2),该时间复杂度是指数级别的

空间复杂度:如果考虑递归调用时栈的大小,则为O(n) ;如果不考虑调用栈的话,则为O(1)

通过观察,我们可以发现递归求解时做了很多重复的工作(见下面的递归调用树)。因此采用递归方式求解斐波那契数列的第n项Fn不是一种好的方法。