1. 程式人生 > >斐波拉契數列的遞迴和非遞迴寫法(c/java)

斐波拉契數列的遞迴和非遞迴寫法(c/java)

C語言版本:
#include <stdio.h>
long fib(long n) {
	if(n<=2)
		return(1);
	if(n>=3)
		return(fib(n-1)+fib(n-2));
}

long fib_1(long n) {
	long i;
	if(n <=2) {
		return 1;
	} else {
		long a = 1;
		long b = 1;
		for( i = 2 ; i < n-1 ; i++) {
			b = a + b;
			a = b - a;
			printf("a=%ld,b=%ld\n",a,b);

		}
		return a + b;
	}
}



void main() {
	long n,f;
	printf("please input n:");
	scanf("%ld",&n);
	f=fib_1(n);
	printf("f=%ld\n",f);
}

Java版本:

public class FibTest {   
    public static void main(String[] arags){   
        long begin = System.currentTimeMillis();   
       System.out.println(fib(10));   
	   //System.out.println(fib_digui(10)); 
        long end = System.currentTimeMillis();   
        System.out.println(end - begin);   
    }  


	public static long fib_digui(int n)
        {
            if (n <= 1)
            {
                return n;
            }
            else
            {
                return fib_digui(n - 1) + fib_digui(n - 2);
            }
        }
	
    public static long fib(int n){   
        if(n < 3)   
            return 1;   
        else{   
            long a = 1;   
            long b = 1;   
            for(int i = 2 ; i < n-1 ;i++){    
                b = a + b;   
                a = b - a;   
                System.out.println("a = "+a +"  b = "+b);   
            }   
            return a + b;   
        }   
    }   
}