Nein , aber nicht aus den Gründen, die andere Leute angegeben haben. Der Unterschied zwischen Rekursion und Induktion besteht nicht darin, dass die Rekursion "von oben nach unten" und die Induktion "von unten nach oben" ist. Die Induktion ist isomorph zu etwas, das als "primitive Rekursion" bezeichnet wird, aber im Allgemeinen ist die Rekursion streng stärker als die Induktion .
Die Unterscheidung zwischen Top-Down und Bottom-Up ist trivial - jedes primitive rekursive "Top-Down" -Programm kann mechanisch in etwas "Bottom-Up" umgewandelt werden. Tatsächlich kann jeder Beweis durch Induktion in ein rekursives Programm umgewandelt werden. Wenn Sie im Rahmen der Berechnung induktiver Konstruktionen beweisen möchten, dass jede natürliche Zahl froopulös ist, schreiben Sie sie als eine Funktion, die einen Beweis dafür konstruiert, dass n froopulös ist, indem Sie einen rekursiven Aufruf ausführen, um einen Beweis zu konstruieren, dass n- Ich bin froopulous.
Der Schlüsselfaktor der Induktion ist, dass Dinge in Form kleinerer Dinge definiert werden und nach endlich vielen Schritten "den Boden erreichen". Natürliche Zahlen sind induktiv, da jede natürliche Zahl entweder 0 oder der Nachfolger einer kleineren natürlichen Zahl ist. Listen sind induktiv, da jede Liste entweder leer ist oder in ein Element und eine kleinere Liste unterteilt ("entfaltet") werden kann.
Manchmal werden rekursive Programme jedoch nicht in Bezug auf kleinere Dinge geschrieben. Nehmen Sie zum Beispiel diese Collatz-Funktion:
fun collatz(n)
if n <= 1
return 0;
else if n % 2 == 0
return 1 + collatz(n / 2)
else
return 1 + collatz(3 * n + 1)
end
Diese Funktion geht weder von oben nach unten noch von unten nach oben und ist daher über die natürlichen Zahlen nicht induktiv.
Es mag einen Befehl geben, dies induktiv zu behandeln, aber für die meisten Dinge gibt es einfach keinen Weg. Funktionen über unendliche Streams sind ein gutes Beispiel. In der Tat sind Streams das prototypische Beispiel eines "koinduktiven" Typs.
Bob Harpers "Praktische Grundlagen für Programmiersprachen", kostenlos online verfügbar, bietet eine schöne Einführung in induktive, koinduktive und rekursive Typen.