2013-01-18 69 views
1

我想在js中編寫一個遞歸函數來計算二進制表示的十進制數。JavaScript中的十進制到二進制遞歸函數

我還是設法通過來解決這個問題:

var t = (function f(n, s) 
{ 
    return((s = (n % 2) + s) && (n == 0)) ? s : f(Math.floor(n/2), s); 
})(4, ''); 

console.log(t); 

小提琴:http://jsbin.com/ihezev/3/edit

但是,我無法擺脫的前導零的。

所以如果我用7執行IIFE,它會產生:0111,我想要111

我該如何擺脫領先的0

(不字符串替換解決方案吧。我想,我可以保持它儘可能多的優雅..我知道我可以做alert(Number(234).toString(2)),但這個問題被標記爲遞歸。)

回答

1

一點點改變,但依然優雅:

var t = (function f(n, s) { 
    return n === 0 ? s || "0" : f(~~(n/2), (n % 2) + s); 
})(7, ""); // "111" 
+0

woooo .....非常漂亮+ 1 –

+0

@RoyiNamir它可以的,如果我們忽略更加優雅括號'N%2 + s' :) – VisioN

+0

你能解釋'~~(n/2)'中的技巧嗎? –

0

你需要傳遞一個參數,表示您是否製作了1。雖然該參數爲false,但您不會爲0生成任何內容。

相關問題