My comp. sci. program stopped at the solid-state physics point in your recursion example. Every step has made me a better programmer.
I think that my knowledge of architecture has influenced my C skills more than my assembly knowledge.
Also, I went through some low-to-mid range math in school (calc-3, diff. eq., linear alg.) and those classes very much made me a better programmer. The analytic thought processes you learn through those classes is invaluable.