Die Ackermannfunktion. Welchen praktischen Nutzen sie für den 0815-User hat, kann ich nicht sagen. Was ich aber weiß ist, dass A(4,3) nicht unbedingt zu einem in Zahlen ausdrückbaren Ergebnis führen muss. Mein Mac sieht das zumindest so. Daraus ist mir folgendes in den Sinn gekommen:
Wenn du, gerade morgens, noch nicht so ganz fit bist und dich irgendwer mit komplexem foo nervt, dann ist das so wie A(4,3) oder eben A mit m ≥ 4 und n > 2.
Wie auch immer, der 0815-User wird dich nicht verstehen; der IT-ler vielleicht und diese merkwürdige Entität da in der Ecke mit dem vollgestickerten Notebook…japp… die ganz bestimmt.
Code in C
/* Ackermann function using recursion */
#include<stdio.h>
int A(int m, int n);
main()
{
int m,n;
printf("Enter two numbers separated by eigher SPACE OR ENTER: \n");
scanf("%d%d",&m,&n);
printf("\nOUTPUT: %d\n",A(m,n));
}
int A(int m, int n)
{
if(m==0)
return n+1;
else if(n==0)
return A(m-1,1);
else
return A(m-1,A(m,n-1));
}
Code in bash
#!/bin/bash
function ackermann {
local m=$1 n=$2
if (( m == 0 )); then
ackres=$(( n + 1 ))
elif (( m > 0 )) && (( n == 0 )); then
ackermann $(( m - 1 )) 1
else
ackermann $m $(( n - 1 ))
local temp=$ackres
ackermann $(( m - 1 )) $temp
fi
}
# Prüfen, ob zwei Parameter übergeben wurden
if [[ $# -ne 2 ]]; then
echo "Verwendung: $0 <m> <n>"
exit 1
fi
# Eingabeparameter zuweisen
m=$1
n=$2
# Funktion aufrufen
ackermann "$m" "$n"
# Ergebnis ausgeben
echo "Ackermann($m, $n) = $ackres"
An dem Tag, an dem ich auf einem Windows-Device nativ und ohne großes Zutun bash-Skripte ausführen kann, werde ich mir den Spaß erlauben und dieses shell-Skript einfach mal unauffällig im Hintergrund – oder vielleicht gleich per Autostart? – ausführen und so gestalten, dass es alle Kerne auslastet. Ein ultimativer Kill-Switch.