defmodule Kata do
def digital_root(n) do
n |> Integer.digits() |> Enum.reduce(0, &Kernel. /2)
end
end
n = 1253
uj5u.com熱心網友回復:
您可以為此使用多子句功能:在第一個中,n
如果它是單個數字,則回傳不變。否則,計算數字的總和(就像你已經弄清楚的那樣)并再次遞回呼叫它的函式。此外,您的 reduce 可以替換為Enum.sum/1
.
defmodule Kata do
def digital_root(n) when n < 10, do: n
def digital_root(n) do
n |> Integer.digits() |> Enum.sum() |> digital_root()
end
end
測驗:
iex(1)> Kata.digital_root(0)
0
iex(2)> Kata.digital_root(1)
1
iex(3)> Kata.digital_root(9)
9
iex(4)> Kata.digital_root(91)
1
iex(5)> Kata.digital_root(912)
3
iex(6)> Kata.digital_root(9123)
6
iex(7)> Kata.digital_root(1253)
2
uj5u.com熱心網友回復:
def digit_sum(number) when number < 10, do: number
def digit_sum(number) when is_integer(number) do
digit_sum(
for digit <- Integer.digits(number), reduce: 0 do
acc -> acc digit
end
)
end
我更喜歡Dogbert。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/489055.html
上一篇:Javascript第一個引數在具有擴展引數的嵌套函式中被忽略
下一篇:可以模擬遞回CTE嗎?