Rekursion ist an sich nicht besser oder schlechter als Schleifen - jede hat Vor- und Nachteile, und diese hängen sogar von der Programmiersprache (und der Implementierung) ab.
Technisch gesehen passen iterative Schleifen besser zu typischen Computersystemen auf Hardwareebene: Auf Maschinencodeebene ist eine Schleife nur ein Test und ein bedingter Sprung, während die Rekursion (naiv implementiert) das Verschieben eines Stapelrahmens, das Springen, Zurückkehren und Zurückspringen umfasst vom Stapel. OTOH, viele Fälle von Rekursion (insbesondere solche, die trivial zu iterativen Schleifen äquivalent sind) können so geschrieben werden, dass der Stack-Push / Pop vermieden werden kann; Dies ist möglich, wenn der rekursive Funktionsaufruf das letzte Ereignis im Funktionskörper ist, bevor er zurückgegeben wird. Dies wird im Allgemeinen als Tail-Call-Optimierung (oder Tail-Recursion-Optimierung ) bezeichnet. Eine ordnungsgemäß tail-call-optimierte rekursive Funktion entspricht meist einer iterativen Schleife auf Maschinencodeebene.
Eine weitere Überlegung ist, dass iterative Schleifen destruktive Zustandsaktualisierungen erfordern, die sie mit der reinen (nebenwirkungsfreien) Sprachsemantik inkompatibel machen. Dies ist der Grund, warum reine Sprachen wie Haskell überhaupt keine Schleifenkonstrukte haben und viele andere funktionale Programmiersprachen sie entweder nicht vollständig oder so weit wie möglich meiden.
Der Grund, warum diese Fragen in Interviews so häufig vorkommen, ist, dass Sie zur Beantwortung vieler wichtiger Programmierkonzepte - Variablen, Funktionsaufrufe, Gültigkeitsbereiche und natürlich Schleifen und Rekursionen - genauestens verstehen müssen die mentale Flexibilität auf den Tisch zu bringen, die es Ihnen ermöglicht, ein Problem aus zwei radikal unterschiedlichen Blickwinkeln anzusprechen und zwischen verschiedenen Erscheinungsformen desselben Konzepts zu wechseln.
Erfahrungs- und Forschungsergebnisse legen nahe, dass es eine Grenze zwischen Menschen gibt, die Variablen, Zeiger und Rekursionen verstehen können, und solchen, die dies nicht tun. Fast alles andere in der Programmierung, einschließlich Frameworks, APIs, Programmiersprachen und deren Randbedingungen, kann durch Studium und Erfahrung erlangt werden. Wenn Sie jedoch keine Intuition für diese drei Kernkonzepte entwickeln können, sind Sie nicht in der Lage, Programmierer zu sein. Das Übersetzen einer einfachen iterativen Schleife in eine rekursive Version ist die schnellste Methode zum Herausfiltern von Nicht-Programmierern. Selbst ein unerfahrener Programmierer kann dies in der Regel in 15 Minuten tun, und es ist ein sehr sprachunabhängiges Problem, das der Kandidat auswählen kann eine Sprache ihrer Wahl, anstatt über Eigenheiten zu stolpern.
Wenn Sie in einem Interview eine Frage wie diese erhalten, ist dies ein gutes Zeichen: Der potenzielle Arbeitgeber sucht nach Personen, die programmieren können, und nicht nach Personen, die sich das Handbuch eines Programmierwerkzeugs auswendig gelernt haben.