2017-04-17 29 views
0

私は、ユークリッドアルゴリズム(2番目のページのhttp://www.math.jacobs-university.de/timorin/PM/continued_fractions.pdf)を使って、2つの数の間で最大の共通分周器(lcd)を見つける簡単なプログラムを作っています。だから私が作成した関数は次のとおりです:予期せぬ結果を与える単純な関数

 function largest_common_divider(num1, num2) { 
      var remainder; 
      var alpha = num1; 
      var beta = num2; 

      for (i = 0; i < 100; i++) { 
       /* we want to find an "n" such that 
        n * beta <= alpha < (n + 1) * beta 

        I initiated n at 1 so that I could use n = 0 
        as the end condition for my loop */   
       for (n = 1; n <= 0; n++) { 
        if (alpha > (n * beta)) { 
         //still didn't find the n 
        } else if (alpha == (n * beta)) { 
         //Hurray! our beta is the lcd 
         n = 0; 
         return beta; 
        } else { 
         // figure out the remainder 
         // and set n = 0 to terminate the loop 
         remainder = alpha - (n - 1) * beta; 
         n = 0; 
        } 
       } 
       //If we didn't find our lcd, than the previous beta 
       //become the new alpha (largest number) and the 
       //the remainder becomes the new beta (smaller number) 
       alpha = beta; 
       beta = remainder; 
      } 
     } 

このプログラムでは、私は正の整数とnum1> numb2だけを期待しています。 15になるように、結果を期待

var a = 45; var b = 15; 

    var bloopidy = largest_common_divider(a,b); 

    console.log("The largest common divider between " + a + " and " + b + " is: " + 
    bloopidy); 

が、何私が得たことは、「未定義」である:

ので、この機能をテストするために、私はこれを作りました。私はこれをデバッグするためのすべての小さな知識を使用しましたが、私はできませんでした!私は助けの男が必要です、いずれかが評価されます。ありがとうございました!!

答えて

3

あなたの第二forループが実行されることはありません:

for (n = 1; n <= 0; n++) 

1<= 0ないので、条件がそもそも真実ではないので、ループが始まることはありません。これは、明示的なreturnが含まれていないので、それは暗黙的にundefinedを返し

function largest_common_divider(num1, num2) { 
     var remainder; 
     var alpha = num1; 
     var beta = num2; 

     for (i = 0; i < 100; i++) { 
      alpha = beta; 
      beta = remainder; 
     } 
    } 

:あなたのコードがに減少させることができることを意味します

+0

男://そのような愚かな間違い! :Pお返事ありがとうございます!乾杯、素晴らしい一日を持っている:) –

関連する問題