斐波拉契數列的遞迴和非遞迴寫法(c/java)
阿新 • • 發佈:2019-01-28
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; } } }