Ruby:因子递归

时间:2014-10-27 21:58:51

标签: ruby

两种方法之间的差异发生在第二条if条件下。第一种方法中的if条件是"如果num< = 1"并且第二种方法中的if条件是"如果num = 1"。我在一张纸上逐步绘制了这两种方法,但我不明白为什么factorial2返回1而不是6.在纸面上,我得到6这两种方法。

def factorial1(num)
    if num < 0
        return "Please use a positive number"
    end

    if num <= 1
        1
    else
        num * factorial(num-1)
    end
end
puts factorial1(3)
#returns 6
def factorial2(num)
    if num < 0
        return "Please use a positive number"
    end

    if num = 1
        1
    else
        num * factorial(num-1)
    end
end
puts factorial2(3)
#returns 1

2 个答案:

答案 0 :(得分:3)

if num = 1

比较者运算符为==,而不是=(赋值运算符)。

也不要忘记使用return关键字,让每个分支返回一些东西是很好的约定。

答案 1 :(得分:-1)

def fact(n)

return 1 if n==0

return n * fact(n-1)    
end  

puts "Enter number"

n=gets.to_i

a=fact(n)
puts a