It's a shame that people aren't taught about the stack these days and how when calling and returning from a function values are put on and removed. I think that helps with recursion because that's still what's happening with the recursive calls. The book
Grokking Algorithms has some nice diagrams showing this (and other useful and interesting things) and code examples in Python.