-1

在此示例中,如何将 n 舍入为整数,以便终止符有效?

比如wonky_coins(5),下一轮递归应该调用wonky_coins(2.5)、wonky_coins(1.666)和wonky_coins(1.25),对吗???

def wonky_coins(n)
  return 1 if n == 0
  return 3 if n == 1

  return wonky_coins(n / 2) + wonky_coins(n / 3) + wonky_coins(n / 4)
end

wonky_coins(5) == 11

第 1 轮:[2, 1, 1]

第二轮:[[1, 0, 0], [0, 0, 0], [0, 0, 0]]

第三轮:[[[0, 0, 0], 0, 0], [0, 0, 0], [0, 0, 0]]

4

1 回答 1

2

试试吧wonky_coins(5.0)

简而言之,如果两个操作数都是类型,Ruby 会解释/为整数除法。Fixnum

如果其中一个或其他操作数是 a ,Float那么结果将是 a Float,具有相关的精度(并且与您在查看问题中的示例代码时期望看到的内容相匹配)。

这有时会让你感到困惑。通常,当您在可能是整数的值之间生成比率时,您不希望这种行为,并且可能需要使用如下防御性代码:

ratio = x.to_f / y

Float以防万一,它强制至少一个操作数为。

此外,您会经常看到Float这样指定的文字:

ONE_THIRD = 1.0 / 3

因为1 / 3 == 0.

于 2013-06-18T14:39:35.317 回答