再帰、反復、動的プログラミングの違い(わかりやすいバージョン)フィボナッチ数列を例にとります

まず、古典的なフィボナッチアルゴリズムの問​​題を紹介します。

関数を記述し、nを入力してフィボナッチ数列のn番目の項を見つけます。フィボナッチ数列の定義は次のとおりです。

F(0)= 0、F(1)= 1
F(N)= F(N-1)+ F(N-2)、ただしN>1。
フィボナッチ数列は0と1で始まり、次のようになります。フィボナッチ数は、前の2つの数を加算して得られます。

1.再帰

再帰は自分自身を呼び出すことであり、これは多くの時間とスペースを消費します。問題を引き起こすWebサイトのほとんどは、フィボナッチ問題での再帰の使用をサポートしていません。

var fib = function(n) {
    if(n<2) return n
    return fib(n-1)+fib(n-2)
};

2.動的プログラミング

動的プログラミングは、カエルのジャンプ手順として理解することができます。いくつの手順を実行しても、最終的な宛先の手順は同じですが、複数のプロセスが存在する可能性があります。本質は時間のスペースです。以下の方法は、 n + 1配列スペース

function fib(n){
    
    var arr=[0,1]
    for(let i=2;i<=n;i++){
        arr[i]=arr[i-1]+arr[i-2]
    }
    return arr[n]

}

3.反復 

反復は、変数の古い値を継続的に使用して新しい値を押し出すプロセスです。簡単に言うと、変数はまだその変数です。つまり、値は常に変化しています。通常のプロジェクトまたはプロジェクトの反復を理解しますが、関数は常に変化し、改善されます。最終的な要件にますます近づきます。次の方法は、first、second、およびsumの値を常に変更することによることがわかります。

var fib = function(n) {
   if(n<=1) return n;
    var first=0,second=1;
    for(var i=2;i<=n;i++){
        var sum = first+second
        first=second;
        second=sum;
    }
    return sum;
};

 

おすすめ

転載: blog.csdn.net/a1059526327/article/details/107861002