斐波那契函數(C語言、JavaScript)

  1. C語言實現斐波那契函數
//C語言實現斐波那契函數

#include <stdio.h>
#include <stdlib.h>

//使用數組作一個簡單的「記憶體」,避免重複計算,
//但會使得空間佔用擴大到n*sizeof(n)
int memoize(int n,int chache[]){
    if(n<=0) return 0;
    if(n==1) return 1;
    if(chache[n]==0){
        chache[n]=memoize(n-1,chache)+memoize(n-2,chache);
    }
    return chache[n];
}

//求取第n個斐波那契數值
int fib(int n){
    if(n<=0) return 0;
    if(n==1) return 1;
    int *cache = (int*)calloc(n+1,sizeof(int));
    cache[0]=0;
    cache[1]=1;
    int sum =  memoize(n,cache);
    free(cache);
    return sum;
}

//測試
int main(int argc, char const *argv[])
{
    int N;
    printf("請輸入一個數字:");
    scanf("%d",&N);
    printf("第%d個斐波那契數值爲 %d\n",N,fib(N));
}

2.JavaScript實現 斐波那契函數數組

//js實現斐波那契函數

//求取第n個斐波那契數值
var fib = function(N) {
    var cache = [0,1];
    cache.length = N+1;
    if(N<=1) return cache[N];
    //使用數組作一個簡單的「記憶體」,避免重複計算,
    //但會使得空間佔用擴大到n
    var memoize = function(n){
        if (cache[n] != null) {
            return cache[n];
        }
        cache[n] = memoize(n-1) + memoize(n-2);
        return memoize(n);
    }
    return memoize(N);
};

//測試
console.log(fib(8));
相關文章
相關標籤/搜索