我正在努力在ruby中编写一个阶乘程序,并且我试图将其写入其中,如下所示:
我的目标是让它工作,然后通过构建它以包括其他统计功能来扩展它。
到目前为止,这是我的代码:
puts "Welcome to the Calculator for Ruby"
puts "Please enter your value to value"
#N factorial value
def n
n = gets.chomp
end
def fact
n * fact(n-1)
end
puts fact(n)
Fyi,我可能会添加我已经看过网络上可用的通用因子代码,但我尝试做的是设置它以便用户定义n而不是静态设置n但是当我尝试要做到这一点,我的代码如上所述错误与以下错误消息: "事实上" :错误的参数数量(1表示0)(ArgumentError)
我对某些措辞表示道歉,不包括具体问题。我的问题将是3部分:
如何正确编写因子计算以对用户提供的值进行操作? (我看到了答案)。
执行计算后,如何存储该值,以便在用户想要将其调用以进行其他计算时保留该值。
最后,在ruby中编写统计函数有什么好的指导来源吗?
感谢大家的帮助
答案 0 :(得分:2)
无需使用n
声明def
,只需将其分配(例如n = gets.chomp
)。
您必须在fact
函数中加入命名参数,例如def fact(x)
。
fact(x)
函数需要一个基本案例,因为您正在使用递归。
您必须将用户输入字符串n
转换为数字,例如n.to_i
。
puts "Welcome to the Calculator for Ruby"
puts "Please enter your value to value"
def fact(x)
(x <= 1) ? 1 : x * fact(x-1)
end
n = gets.chomp.to_i
puts "#{n}! => #{fact(n)}"
答案 1 :(得分:1)
更简单的方法。只需注入从1到n的数字。
puts 'Welcome to the Calculator for Ruby'
puts 'Please enter your value to value'
n = gets.chomp.to_i
puts (1..n).inject(:*)
答案 2 :(得分:0)
可能不是最好的解决方案但是你去了
puts "Welcome to the Factorial Calculator for Ruby"
puts "Please enter your value to exaluate"
n = gets.chomp.to_i
def fact(num)
return num <= 1 ? 1 : num * fact(num - 1)
end
puts "The factorial of #{n} is #{fact(n)}