1)格式化:-)
def converttobinary(n:Int, bin:List[Int]):String = {
if(n/2 == 1) (1:: (n % 2) :: bin).mkString(" ")
else {
val r = n % 2;
val q = n/2;
converttobinary(q, r::bin)
}
}
2)簽名:
我將省略轉換部分地由累加器可選參數(函數用戶沒有按」不得不提供僅用於內部實現的參數,對吧?)
def toBinary(n:Int, bin: List[Int] = List.empty[Int]): String = {
if(n/2 == 1) (1:: (n % 2) :: bin).mkString(" ")
else {
val r = n % 2
val q = n/2
toBinary(q, r::bin)
}
}
現在,它可以被用作:
val str = toBinary(42)
有人可能建議你皮條客這樣的功能,所以調用可能看起來像
val str = 42.toBinary // btw, there is such function in std lib: 42.toBinaryString
但我看不到太多的利潤。
困擾我的另一件事是,您正在使用List & mkString爲此目的,爲什麼不是StringBuilder?什麼是q和r?
和最終輕微點 - 地方@annotation.tailrec
,以確保功能,即使在未來的情況下進行優化改變
的問題可能會更適合http://codereview.stackexchange.com/;一兩件事,它會與'N = 0' –