//利用循环输出前40项 #include <stdio.h> int main() { long fib[41] = {0,1}; int i; for(i=2;i<41;i++)fib[i] = fib[i-1]+fib[i-2]; for(i=1;i<41;i++)printf("F%d==%d\n",i,fib[i]); getch(); return 0; } //利用递归实现指定项输出 第n项和。 long fib(int n) { if (n==0) return 0; if (n==1) return 1; if (n>1) return fib(n-1)+fib(n-2); } int main() { int k=1; while(k!=0) { puts("input a num n 0 for exit"); scanf("%d",&k); printf("%ld\n",fib(k)); } getch(); return 0; } //高精度斐波那契数列(3000长度的可求到第10000多项) #include<stdio.h> #include<iostream> using namespace std; int a[3001]={}; int b[3001]={}; int c[3001]={}; int n; int main() { scanf("%d",&n); if(n<3) {printf("%d\n",n); return 0;} c[1]=2; b[1]=1; for(int i=1;i<=n-2;i++) {for(int j=1;j<=3000;j++) {a[j]=b[j]; b[j]=c[j]; c[j]=0;} for(int j=1;j<=3000;j++) {c[j]=c[j]+a[j]+b[j]; if(c[j]>=10) {c[j]=c[j]-10; c[j+1]=1;} } } int i=3000; while(c[i]==0) i--; for(i=i;i>=1;i--) printf("%d",c[i]); printf("\n"); system("pause"); return 0; }
C#语言程序
public class Fibonacci { //NormRen static void Main(string[] args) { int x = 0, y = 1; for (int j = 1; j < 10; j++, y = x + y, x = y - x) Console.Write(y + " "); } }
Java语言程序
/* 快速计算第n个Java程序,一秒计算第10万个数字。 Intel Core2 Duo CPU P8600 2.4GHz 计算第100000个斐波那契数列的数所花时间(毫秒): 第100000:967.8 981.1 988.8 966.3 994.4 */ public class Fib { //n为第n个斐波那契数列的数 public static BigInteger compute2(int n) { if (n == 1 || n == 2) { return BigInteger.ONE; } BigInteger num1 = BigInteger.ONE; BigInteger num2 = BigInteger.ONE; BigInteger result = BigInteger.ZERO; for (int i = 2; i < n; i++) { result = num1 .add(num2); num2 = num1; num1 = result; } return result; } } public class Fibonacci { public static void main(String[] args) { int x=1,y=1; System.out.println(x+" "); for(int i=1;i<=20;i++) { System.out.println(y+" "); y=x+y;x=y-x; } } } Java语言程序(高精度,约一秒钟计算第20000个数值) import java.util.Scanner; public class Main{ public static void main(String[] args){ Scanner s=new Scanner(标准输入); int n=s.nextInt(); do{ cul(n); n=s.nextInt(); }while(n>0);//当n<=0时终止 } private static void cul(int n) { BigIntT b=new BigIntT(); BigIntT a=new BigIntT(); b.formatBigInt("1"); a.formatBigInt("2"); if(n==1 || n==2) { System.out.println(1); return; } int i=3; for(;i<=n;i++){ if(i%2>0) b.add(a); else a.add(b); } BigIntT t=null; if(i%2>0) t=b; else t=a; for(int j=t.getPos();j<100000;j++) System.out.print(t.getBase(j)); System.out.println(); } } class BigIntT{ int max=100000; private byte[] base=new byte[max]; private int pos=max; public void formatBigInt(String arr){ int l=arr.length(); if(l==0) return; int tmp=l-1; for(int i=max-1;i>=max-l;i--){ base[i]=(byte) (arr.charAt(tmp--)-'0'); pos--; } } public void add(BigIntT right) { int bigger=this.getPos()>right.getPos()?right.getPos():this.getPos(); pos=bigger; for(int i=max-1;i>=pos-2;i--){ int t=this.base[i]+right.getBase(i); if(t>=10){ this.base[i]=(byte) (t%10); this.base[i-1]+=t/10; if(i-1<pos) pos=i-1; }else{ this.base[i]=(byte) t; } } } public int getPos(){ return pos; } public byte getBase(int index){ return base[index]; } }