A(m,n)

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.