【发布时间】:2018-10-18 02:31:12
【问题描述】:
我正在尝试在 ruby 中创建一个递归乘法器。
@j = 0
def multiplier(x, y, z)
count = 0
if x > 0
if z > 0
@j += y
z -= 1
count += 1
multiplier(x, y, z)
else
x -= 1
z = count
p z
multiplier(x, y, z)
end
else
return @j
end
end
def main
puts "Calculation is: " + multiplier(3, 10, 4).to_s
end
main
X 是乘法发生的次数
Y 是我们要相乘的数字
Z 是我们乘以的数
代码应该输出120和那里的变量
我在让 Z 保持我需要的样子时遇到问题。另外,我更愿意在没有全局变量的情况下这样做
类似 x*(y*z) 但没有时间符号
【问题讨论】:
-
我很困惑...
x * y * z总是得到正确的解决方案吗? (顺便说一句,这与x * (y * z)相同).. 因为这似乎与您对变量的解释不一致。 -
x*(y*z) 总会得到正确答案。获取代码中存在的变量。 x: 3, y: 10, z: 4 ==> 3*(10*4) ==> 3*(40) ==> 120。你觉得有什么不同?
-
好的,我明白你的要求了。我认为关键是你想在没有时代符号的情况下做到这一点,也许你应该更明确地说这是要求的一部分。
-
我虽然递归乘法总是没有时间符号。我也在我的问题结束时发表了评论,没有时间符号
-
不知道为什么递归很重要,但我们可以避免像这样的时间符号
Array.new(x,Array.new(y,z)).flatten.reduce(:+)