Ruby 红宝石中的阶乘

Ruby 红宝石中的阶乘,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

我试图在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
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