teamtempest wrote:
I suspect NASA would hate my Python code, since I love to use function indirection :-)
Function indirection, and function composition in general, really helps with code clarity and making sure things work right: consider how hard it is to make an error with map(f, somelist) than with writing a loop yourself. (Essentially, you're re-using "loop" code that's already been written and verified.)
Recursion is also limited due to the nature of C; in other languages you would prefer it because it's easier to verify (both manually and with automated tools) than loops are. Blowing up the stack isn't an issue if you use tail recursion (also easily verified) and your compiler does tail call optimisation.
With a good type system you can even easily make sure code that ignores return values can't compile, have "pointer" values that cannot be null, ensure that all memory you allocate on the heap is freed within a certain boundary, automatically put limits on loops and recursion without it having to be explicit code visible wherever it's used (it's not hard to write a monad in Haskell that does this for you), have list and array lengths type checked at compile time (e.g., writing a function that you can't call with an empty list), and so on.