JavaScriptの累積、反復、貧困、再帰などの一般的なアルゴリズムの例のまとめ

4824 ワード

本論文の実例は、JavaScript反復、反復、貧困、再帰などの一般的なアルゴリズムを述べている.皆さんに参考にしてあげます.具体的には以下の通りです.
累積と累積
アキュムレータ:一連のデータを変数に加算します.最後の積み重ねの結果
例えば、1から100までの数を合計します.
小さいボールは高いところから落ちて、毎回もとの半分に戻って、第10回の小さいボールが地面に落ちる時小さいボールの歩いたことがある道のりを求めます.


 var h=100;
 var s=0;
 for(var i=0;i<10;i++){
  h=h/2;
  s+=h;
 }
 s=s*2+100;


累積:一連のデータを一つの変数に積積し、累積した結果を得る.
よくあるのはnの階乗です.

var n=100;
var result= 1;
for(var i=1;i<=n;i++){
 result *=i;
}

一般的な形式:
アキュムレス:V+=e
累積:v*=e
Vはアキュムレータと累積を表し、eはアキュムレータ/累積項目を表します.
アルゴリズムのポイント:
(1)初期化
vとeを初期化します
アキュムレータ:v=0
累積:v=1
eの初期化は、アキュムレータ/積項が複雑であれば、円周率を計算する問題など、いくつかのサブ項に分解してそれぞれ初期化することができ、累積項は符号、分子、分母の3つの部分に分解される.
(2)サイクルの制御条件
一つは固定回数で、例えばジャンプ距離を計算する問題、数列前の20項の和を計算する問題、
回数は固定ではなく、ある条件を満たすために必要です.円周率の計算には最後の項の絶対値が必要です.10-6より小さいです.
(3)アキュムレータ/積項の変化を確定する
たとえば、数列の前20項の和は、現在の分子を次の分母とし、現在の分母を分子とします.
また、例えば円周率を求める問題は、符号を逆にとり、分母を2に加え、次の項目を出すことです.
反復
反復法はつまり転々とする方法である.
規則:古いものをどんどん使って新しい値に達することができます.
反復問題に会ったらどう解決しますか?
1.  反復変数(古い値)が見つかりました.
2.  反復の関係を決定します.
3.  欲しい結果が分かりますか?
(1)最終結果を知ることです.
(2)サイクルの回数


 /*
 * 1.          
 * 2.           
 * 3.         */
 var num1 = Number(prompt("      "));
 var num2 = Number(prompt("      "));
 var result = GCD(num1,num2);
 alert(result);
 /*
 *      :       
 *    :GCD
 *      :    
 *    :     */
 /*
 *   num1<num2   ,  num1    
 *     
 *  num1(  ), num2(   )     0,      
 * num2=>num1,
 *   =>num2
 *       
 *          ,   num2  */
 function GCD(num1,num2){
  /*return0;*/
  if(num1<num2){
   var t = num1;
   num1=num2;
   num2 = t;
  }
  var remainder = num1%num2;
  while(remainder!= 0){
   num1=num2;
   num2= remainder;
   remainder=num1%num2;
  }
  returnnum2;
 }


さしあげる
数学の法則を見つけます.数式を通して次の項目の値を計算します.
例えば、ウサギの産子:前の二つの項目から次の項目を獲得します.


 /*
 *     ,         ,      
 *                 
 *           ,              */
 /*
 *    0 1 2 3 4 5 6
 *    1 1 1 2 3 5 8
 *    0 0 1 1 2 3 5
 *    1 1 2 3 5 8 13
 * */
 /*
 *          
 *        
 * (1)       <2        1
 * (2)                       
 *          (an = an-1 +an-2)
 *         ,                       
 *         
 * */
 /* var month = Number(prompt("    "));
  var sum ;
  var an =1;
  var an_1=1;
  var an_2;
  if(month < 2){
  sum=1;
  }else{
  sum=2;
  for(var i=1; i<month; i++){
  sum= an +an_1;
  an_1 =an;
  an = sum;
  }
  }
  alert(sum);*/
 /*
 *   2*/
 var month = Number(prompt("    "));
 var rabbit = [1,1];
 for(var m=2;m<=month;m++){
  rabbit[m]=rabbit[m-1]+rabbit[m-2];
 }
 alert(rabbit[month]);


配達推しは順押しと逆押しに分けられます.
貧しい挙挙
問題があったら、もっといい解決方法が見つからないです.(数学の公式や規則が見つからない)時、「最も愚か」な方法を使って、コンピュータを利用してスピードの速い特徴を計算して、すべての可能性を全部並べます.
そして、私たちが得たい結果を記録します.


 /*
 *      5,      ,      
 *      ,   ,  、     ?
 * x y z
 * x + y + z = 100
 * x*5 + y * 3 + z/3 = 100*/
 for(var cock=0;cock<=20;cock++){
  for(var hen=0;hen<=33;hen++){
   var chihen=100-cock-hen;
   if(100== cock*5+ hen*3+ chihen/3){
    document.write("    :"+cock+"    :"+hen+"    :"+chihen+"<br>")
   }
  }
 }


方法の特徴を挙げます.アルゴリズムが簡単で、それに応じたプログラムも簡単ですが、計算量が多いです.しかし、コンピュータの利点は、演算速度が速いので、このアルゴリズムは、しばしば良い効果を得ることができます.
実例:三桁の数字があります.百桁の数字は十桁の数字より大きいです.そして、皆さんの数字の和は皆さんの数字の積に等しいです.この三桁の数字を求めてください.
再帰する
再帰とは、関数の内部でまた自分を呼び出すことです.
例えば、階乗の問題を求めて、fact関数の内部でまたfact関数を呼び出しました.


 /*  n   */
 function fact(n){
  if(1== n){
   return 1
  }
   return n*fact(n-1);
 }
 alert(fact(5));


再帰的アルゴリズムは、従来の考え方で理解すると非常に複雑であり、関数は、一層の入れ子コールを呼び出し、その後、もう一つの層に戻って、考え方を変えて再帰的に理解することができる.
再帰は実際には、規模がnの問題をn-1に値下げして解決します.nとn-1の関係を探します.
もっと多くのJavaScriptに関する内容について興味がある読者は、当駅のテーマを見ることができます.「JavaScript数学演算用法まとめ」、「JavaScriptデータ構造とアルゴリズム技術まとめ」、「JavaScript配列操作技術まとめ」、「JavaScript事件に関する操作とテクニック大全」、「JavaScript操作DOM技巧まとめ」及び「JavaScript文字と文字列操作テクニックのまとめ」
本論文で述べたように、JavaScriptプログラムの設計に役に立ちます.