c语言函数调用费波那楔数列,【算法】费波那契数列算法

费波那契数列算法

作者:白宁超

2016年10月27日20:06:54

斐波那契数学描述:

F0 = 0     (n=0)

F1 = 1    (n=1)

Fn = F[n-1]+ F[n-2](n=>2)

Python语言实现:

分析:当n=0时为0,n=1时为1,n>2时,最后两数之和。由此可知,链表fibs初始化0,1;列表可以当做链表使用,具有负数索引特性,采用后两位数相加追加即可。

import datetime

#由于斐波那契特性前两首0,1,其后各项均为之前两数之和可知,时间复杂度O(n)

def fib(n):

fibs=[0,1]

for i in range(n-2): #开始两项已知

fibs.append(fibs[-2]+fibs[-1])

return fibs[-1]

#迭代实现,时间复杂度O(n)

def fib1(n):

a,b = 0,1

for i in range(n-1):

a,b= b,a+b

return a

#递归算法实现,其中n=0返回0,n=1返回1,n>=2返回之前两项之和,时间复杂度O(nlgn)

def fib12(n):

if n == 0:

return 0

elif n == 1:

return 1

else:

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

# 递归进行初始化O(nlgn)

def fib3(n):

init = {0: 0, 1: 1}

if not n in init:

init[n]=fib2(n-2)+fib2(n-1)

return init[n]

print(datetime.datetime.now())

#print("1\t"+str(fib(10000))) #0.1S

print(datetime.datetime.now())

print("2"+str(fib3(10000))) #0.8s

print(datetime.datetime.now())

#print("3\t"+str(fib1(30))) #3.4s

print(datetime.datetime.now())

#print("4\t"+str(fib2(30)) #7.1s

print(datetime.datetime.now())

Java代码实现:

class Ideone

{

public static void main (String[] args) throws java.lang.Exception

{

int fibnum=fib1(1000);

System.out.println(fibnum);

}

//递归算法

public static int fib(int n){

if(n==0) return 0;

else if(n==1) return 1;

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

}

//非递归算法

public static int fib1(int n){

int a=0,b=1,temp=0;

for(int i=0;i

temp=a;

a=(a+b);

b=temp;

}

return a;

}

}

C语言代码实现:

#include

int fib(int n);

int main(void) {

// your code goes here

int fibnum=fib1(10);

printf("%d",fibnum);

return 0;

}

//递归算法

int fib(int n){

if(n==0) return 0;

else if (n==1) return 1;

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

}

//非递归算法

int fib1(int n){

int a=0,b=1,temp=0;

for(int i=0;i

temp=a;

a=(a+b);

b=temp;

}

return a;

}

C#代码实现:

public class Test

{

public static void Main()

{

// your code goes here

int fibnum=fib1(10);

Console.WriteLine(fibnum);

}

//递归算法

public static int fib(int n){

if(n==0) return 0;

else if(n==1) return 1;

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

}

//非递归算法

public static int fib1(int n){

int a=0,b=1,temp=0;

for(int i=0;i

temp=a;

a=(a+b);

b=temp;

}

return a;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值