Is the first way the "Ruby way" (how I wrote it) and the second more functional/the Golang way (from a Golang video tutorial)?
(Also, really warming up to my new Vim colorscheme...) https://octodon.social/media/1wicQXUJE9DFWHtu_rM
@noelle huh. I was taught not to have `return` statements early in methods (unless error checking), which I first resisted but eventually came around to as it can improve readability if you're consistent about it.
I'm actually not 100% how your method works!! I'd have thought it would always return a 1...
@schlink It should only return 1 if num is less than or equal to 1 (<= 1). return statements in the final position are apparently unRubyic, so I got rid of it, but you could just as easily write
return num * factorial(num - 1)
@schlink As for having return statements early in methods - have return statements wherever it makes sense to have them. Not having them early in functions means you're giving up on a lot of input checking. There's no real value in reserving return statements until the end of a function; it doesn't /actually/ improve readability and it's just arbitrary.
@noelle I at first thought
return n * factorial(n-1)
was the sleekest Ruby solution but I'm getting a "stack level too deep" error when I run it.
@schlink Because it's not stopping when you hit 1. :)
@noelle oh I see-- you were showing that I could use the `return` keyword. The only reason I used it in the first screenshot is I think Go requires it. I'm all for implicit returns in Ruby!
So `return 1` is basically a loop break out of your method. That's interesting and new to me! Thanks!
@schlink Hm. I dunno much about Golang, but in Ruby I think I'd write:
def factorial(num):
if num <= 1:
return 1
end
num * factorial(num - 1)
end