Different factorial algorithms
if n &lt; 2
    1
else
    n * factorial_r(n - 1)
end


This is exactly equivalent to the following, which is called a ternary statement:

n &lt; 2 ? 1 : n * factorial_r(n - 1)




Your factorial_r and factorial_r_recursion functions call each other, but this makes you call your validate function over and over. You should rewrite it so that factorial_r_recursion only ever calls itself, because you can ensure that everything it produces is valid already. (Same with the tr functions)



if n &lt; 0 or not n.kind_of? Integer


This would be much better worded as:

unless n.is_a? Integer &amp;&amp; n &gt;= 0


No one uses kind_of?, and you need to check if the number is an Integer before you compare it to 0.



Although it doesn't appear to be in the scope of your project, ideally you would not call validate at the beginning of each factorial method. You would call it once, when you actually get n, and THEN pass it in to the factorial function.

Some last points; I recognize that this is a learning step for you, but do not use for loops in ruby. They have bad side effects and you do not need them, there are plenty of ways to iterate over collections. Also the while loop looks rather ugly but that's because it's the wrong tool for the job, so it's to be expected.

All in all, it's pretty decent ruby! Good job on using reduce / inject, a lot of beginners don't use/comprehend what they do., however reduce is an alias of inject so to have them both is kind of silly :P