sjk2426
sjk2426

Reputation: 47

Ruby: Factorial Recursion

The difference between the two methods occurs at second if condition. The if condition in the first method is "if num <= 1" and the if condition in the second method is "if num = 1". I mapped out both methods on a piece of paper step by step but I don't understand why the factorial2 returns 1 instead of 6. On paper, I get 6 for both methods.

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

Upvotes: 0

Views: 4243

Answers (2)

Techie
Techie

Reputation: 9504

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

Upvotes: -1

kyflare
kyflare

Reputation: 874

if num = 1

Comparator operator is ==, not = (assignment operator).

Also don't forget to use return keyword, it is good convention to make each branch return something.

Upvotes: 3

Related Questions