2017-07-14 43 views
-1

我使用for循環編寫了JS中的factorial代碼,但沒有顯示所需的輸出。factorial javascript代碼?

我的代碼有什麼問題?

var solution; 
for (x = 12; x > 0; x -= 1) { 
    for (y = 12; y > 0; y -= 1){ 
     solution = y * x; 
    } 
} console.log(solution); 
+1

你能解釋一下你打算每一部分做什麼? – Ryan

+0

,因爲每次迭代你替換解決方案....所以當你在最後一次迭代,你得到的價值.... – epascarello

回答

0

您沒有使用solution當你重新定義它,所以基本上你是計算

solution = 1 * 1; 

你的代碼似乎什麼都沒有做階乘或遞歸(這需要一個funtion定義)?

0

一種12階乘是12 * 11 * 10 ... * 2 * 1

編寫在你想當前一個像這樣乘上一次迭代的結果的循環。

var solution = 1; 
for (x = 12; x > 0; x -= 1) { 
    solution = solution*x 
} 
console.log(solution); 

您的示例將以y和x結束爲1.因此輸出1 * 1。您需要保存上一個操作的結果。

我建議你按照社區規則處理將來的問題,我也不想讓你從這個社區中脫身,但請在將來谷歌。

0

你的內循環是沒有必要的。您需要設置初始條件(即將解決方案初始設置爲1),然後將12到1的數字反覆乘以該初始條件。

使用for循環稱爲「迭代」而不是遞歸。

遞歸地做到這一點,您至少需要定義一個函數。學習如何遞歸思考是你應該谷歌的東西。

無論採用哪種方式,兩種方式對於找到階乘都是非常基本的,並且使用哪種方法並不重要。

// Iterative 
 
var solution = 1, 
 
    number = 12, 
 
    x, y; 
 
for (x = number; x > 0; x -= 1) { 
 
    solution *= x; 
 
} 
 
console.log(solution); 
 

 
// Recursive 
 
function fact(n){ 
 
    if(n == 1) 
 
    return 1; 
 
    else 
 
    return n * fact(n - 1); 
 
} 
 

 
console.log(fact(number))