我正在尝试编写一个程序来进行阶乘。我做了这个:
continue_loop=true
def fact(n)
if n==0
1
else
n*fact(n-1)
end
end
while continue_loop
puts "Welcome to the factorial machine. Write a number! Write exit to exit the program"
user=gets.chomp
if user=="exit"
continue_loop=false
else puts fact(user.to_i)
puts "--------"
end
end
我在行上获得* can't be coerced into Fixnum(TypeError)
:
n*fact(n-1)
和
else puts fact(user.to_i)
我发现我收到此错误,因为n*fact(n-1)
的右侧是nil
。但是,我不知道如何做递归。
可以使用inject
完成,但我想学习使用递归。
答案 0 :(得分:0)
你的职能:
def fact(n)
if n==0
1
else
n*fact(n-1)
end
end
很好。 if/else
返回两个块的值。为了确保我只是尝试使用fact(5)
并返回120
。如果出现问题,那就不行了。当然,你的函数fact(-1)
失败了,但这是另一个问题。
你的功能无法返回零。它将返回1或乘法结果。因此在n*fact(n-1)
中,右手不能为零。左手可能是。找出原因。