2017-02-23 100 views
-1

我必須解決以下功能:「x」表示多個週期。一個循環和+1,然後乘以結果* 2。例如:Javascript框架結構

0 cycles = 0 + 1 = 1 (result) 
1 cycles = 1 * 2 = 2 (result) 
2 cycles = 2 + 1 = 3 (result) 
3 cycles = 3 * 2 = 6 (result) 
4 cycles = 6 + 1 = 7 (result) and so on. 

我有這樣的功能:

function final(x) { 
    for (var i = 0; i < x; i++) { 
     var result = x[i] * 2 + 1 
    } 
    return result; 
} 

你能幫助我嗎?

+1

模數運算符 – epascarello

+0

如果'x'是週期數,'x [i]'背後的原因是什麼? – Andreas

+0

當你在循環中有

回答

0

感謝您的幫助,該解決方案最後是這樣的:

function final(x){ 
var result = 0; 
for (var i = 0; i < x; i++){ 
if (i % 2 === 0){ 
result = result * 2 + 1;} 
else{ 
result = (result + 1);} 
} 
return result+1; 
} 
0

此,如果你不介意的事實,對於從1開始

function final(x) { 
    var result = []; 
    result[0] = 1; 
    for (var i = 1; i < x; i++) { 
     result[i] = i % 2 ? result[i - 1] * 2 : result[i - 1] + 1; 
    } 
    return result; 
} 
0

如果你只需要功能的最終結果那麼下面將實現爲你應該工作。

function final(x) { 
    var result = 0; 

    for (var i = 0; i < x; i++) { 
     if (x % 2 === 0) { 
      result = result + 1; 
     } else { 
      result = result * 2; 
     } 
    } 

    return result; 
} 
+1

如果他不想存儲結果,這是最好的答案。 – Kornflexx

+0

@Kornflexx礦是更高效的;) – juvian

+0

@Juvian是你的方式更有效率。 – Kornflexx

1

如果要存儲結果,可以使用@Kornflexx的答案。如果沒有,你可以直接計算值:

function final (x) { 
    var t = (4 << (x/2)) - 2; 
    return x % 2 ? t : t/2; 
} 

注意,如果x是大的,你會很快過去的INT限制,然後將需要處理大整數

0

只爲多種,你可以有這個縮寫形式

function final(x) { 
 
    var result = 0; 
 

 
    for (var i = 0; i < x; i++) { 
 
    result = x % 2 == 0 ? result + 1 : result * 2 
 
    } 
 
    console.log(x,result) 
 
    return result; 
 
} 
 

 
final(3)