Faut savoir quand même que lors de chaque appel de fonction, ya tout un tas d'opérations faites par le processeur pour construire le cadre de cette fonction : allocation de RAM pour les variables locales, sauvegarde des registres, empilage d'une adresse de retour pour que le programme sache où reprendre en sortant de la fonction, retour à la fonction appelante... Beaucoup d'opérations qui ne sont pas directement utiles au calcul, surtout pour un calcul aussi simple que celui présenté dans cet exemple. De plus, plus on récurse et plus on consomme de mémoire. Tant qu'on récurse pas beaucoup ça va, on a quand même des machines rapides avec plein de RAM.
Personnellement, pour des raisons d'optimisation en vitesse et en mémoire (de sécurité même : je risque pas de me retrouver à court de RAM), j'évite autant que possible la récursivité. Mais quand yen a besoin, j'hésite pas non plus.