Ruby 红宝石中的阶乘
我试图在Ruby程序中对阶乘求和。我无法解决。一个澄清,当他们用完点。。。。这意味着逻辑是正确的。如果你在其中一个点上得到一个F,这意味着逻辑是错误的 写一个程序来计算1+1/(2!)+1/(3!)+1/(4!)+…+对于给定的n,为1/(n!)。用两种方法编写程序:使用While、ForRuby 红宝石中的阶乘,ruby,Ruby,我试图在Ruby程序中对阶乘求和。我无法解决。一个澄清,当他们用完点。。。。这意味着逻辑是正确的。如果你在其中一个点上得到一个F,这意味着逻辑是错误的 写一个程序来计算1+1/(2!)+1/(3!)+1/(4!)+…+对于给定的n,为1/(n!)。用两种方法编写程序:使用While、For def factorial(n) #(n == 0) ? 1 : n * factorial(n - 1) fact = 1 for i in 1..n fact = fact * i end retur
def factorial(n)
#(n == 0) ? 1 : n * factorial(n - 1)
fact = 1
for i in 1..n
fact = fact * i
end
return fact
end
def sumatoriaWhile(n)
total = n
sumatoria = 0.0
while n > 1
total = total * (n - 1)
n = n - 1
sumatoria =sumatoria + total.to_f
end
return (1 + (1 / total.to_f)).round(2)
end
def sumatoriaFor(n)
fact = 1
sumatoria = 0.0
for i in 1..n
for j in 1..i
fact = fact * j
end
sumatoria = sumatoria + (1 / fact.to_f)
i = i + 1
end
return sumatoria.round(2)
end
#--- zona de test ----
def test_factorial
print validate(120, factorial(5))
print validate(5040, factorial(7))
print validate(362880, factorial(9))
end
def test_sumatoriaWhile
print validate(1.50, sumatoriaWhile(2))
print validate(1.83, sumatoriaWhile(3))
end
def test_sumatoriaFor
print validate(1.50, sumatoriaFor(2))
print validate(1.83, sumatoriaFor(3))
end
def validate (expected, value)
expected == value ? "." : "F"
end
def test
puts "Test program"
puts "---------------------------"
test_factorial
test_sumatoriaWhile
test_sumatoriaFor
puts " "
end
test
我很难弄清楚你在求和函数中做了什么。这里有一个简单的函数:
def sumatoriaFor(n)
return 0 if n <= 0
factorial = 1
sum = 0.0
for i in 1..n
factorial *= i
sum += 1.0 / factorial.to_f
end
return sum.round(2)
end
def sumatoriaWhile(n)
return 0 if n <= 0
i = 1
factorial = 1
sumatoria = 0.0
while i <= n
factorial *= i
sumatoria += (1.0 / factorial.to_f)
i = i + 1
end
return sumatoria.round(2)
end
朋友,谢谢你的及时回复。首先,我感谢你的帮助。我正在学习ruby编程,希望能像你和其他人一样学到更多。如果答案确实是错误的。我修改了答案。而且还需要知道While的功能是什么。我在此再次修改程序。现在我得到了一个F
def factorial(n)
fact = 1
for i in 1..n
fact = fact * i
end
return fact
end
def sumatoriaWhile(n)
total = n
sumatoria = 0.0
while n < 1
total = total * (n - 1)
sumatoria = sumatoria + (1.0 / total.to_f)
n = n - 1
end
return sumatoria.round(2)
end
def sumatoriaFor(n)
fact = 1
sumatoria = 0.0
for i in 1..n
fact = fact * i
sumatoria = sumatoria + (1.0 / fact.to_f)
end
return sumatoria.round(2)
end
#--- zona de test ----
def test_factorial
print validate(120, factorial(5))
print validate(5040, factorial(7))
print validate(362880, factorial(9))
end
def test_sumatoriaWhile
print validate(1.50, sumatoriaWhile(2))
print validate(1.67, sumatoriaWhile(3))
end
def test_sumatoriaFor
print validate(1.50, sumatoriaFor(2))
print validate(1.67, sumatoriaFor(3))
end
def validate (expected, value)
expected == value ? "." : "F"
end
def test
puts "Test de prueba del programa"
puts "---------------------------"
test_factorial
test_sumatoriaWhile
test_sumatoriaFor
puts " "
end
test
def阶乘(n)
事实=1
因为我在1..n
事实=事实*i
结束
返回事实
结束
def Sumathorie一段时间(n)
总数=n
苏门答腊岛=0.0
而n<1
总计=总计*(n-1)
苏门答腊岛=苏门答腊岛+(1.0/总计至)
n=n-1
结束
返回苏门答腊岛。第二轮(2)
结束
苏门答腊福特酒店(北)
事实=1
苏门答腊岛=0.0
因为我在1..n
事实=事实*i
苏门答腊岛=苏门答腊岛+(1.0/fact.to_f)
结束
返回苏门答腊岛。第二轮(2)
结束
#---地带性试验----
def检验因子
打印验证(120,阶乘(5))
打印验证(5040,阶乘(7))
打印验证(362880,阶乘(9))
结束
一段时间内进行def测试
打印验证(1.50,苏门答腊岛一段时间(2))
打印验证(1.67,苏门答腊岛一段时间(3))
结束
苏门答腊湖def测试
打印验证(1.50,苏门答腊岛(2))
打印验证(1.67,苏门答腊岛(3))
结束
def验证(预期值)
期望==值?“:“F”
结束
def测试
放入“程序测试”
放入“------------------------------”
析因检验
测试一段时间
苏门答腊岛测试
放置“”
结束
测试
(又称“注入”)通常是求和序列的方法。这里:(1..n).reduce([0.0,1]){|(tot,fact),i | f=i*fact;[tot+1.0/f,f]}。首先
。对于n=3
,这将返回1.666…
,我认为这是正确的(尽管与您的不同)。(注意1.0/3!=1.0/6=0.1666…
)感谢Cary的及时回复。我需要在学习一个过程时,我在其中发布了我的过程,我想知道它是对的还是错的。@Croelanjr看到我的更新,你应该通过查看函数更好地了解ruby是如何工作的。这个问题与ruby无关,依我看,您似乎没有正确计算阶乘。我已经修改了程序,我已经改变了结果。根据您的评论,您正在使用inject。我请求帮助与while,做一个程序的阶乘和使用while。我想看到这个过程,我想看到它。我想知道两者之间的区别是什么,因为我明白,这就是为什么我发表评论而不是回答的原因。很高兴能帮上忙…你真的不应该用答案来给出你的反馈。评论就行了。你在说我什么评论?我只发布了修改后的回复代码。我也是这个论坛的新手。我想学红宝石。我也需要,因为总数在里面。朋友。很抱歉发生了什么事没有看到完整的帖子。当我第一次走进这个地方的时候。我惊讶地在托盘上看到哈比亚斯寄给我的东西。很抱歉
def factorial(n)
fact = 1
for i in 1..n
fact = fact * i
end
return fact
end
def sumatoriaWhile(n)
total = n
sumatoria = 0.0
while n < 1
total = total * (n - 1)
sumatoria = sumatoria + (1.0 / total.to_f)
n = n - 1
end
return sumatoria.round(2)
end
def sumatoriaFor(n)
fact = 1
sumatoria = 0.0
for i in 1..n
fact = fact * i
sumatoria = sumatoria + (1.0 / fact.to_f)
end
return sumatoria.round(2)
end
#--- zona de test ----
def test_factorial
print validate(120, factorial(5))
print validate(5040, factorial(7))
print validate(362880, factorial(9))
end
def test_sumatoriaWhile
print validate(1.50, sumatoriaWhile(2))
print validate(1.67, sumatoriaWhile(3))
end
def test_sumatoriaFor
print validate(1.50, sumatoriaFor(2))
print validate(1.67, sumatoriaFor(3))
end
def validate (expected, value)
expected == value ? "." : "F"
end
def test
puts "Test de prueba del programa"
puts "---------------------------"
test_factorial
test_sumatoriaWhile
test_sumatoriaFor
puts " "
end
test