Funzione 91 di McCarthy
In matematica discreta, la Funzione 91 di McCarthy è una funzione ricorsiva che restituisce 91 per tutti gli argomenti n ≤ 101 e restituisce per . Limitatamente all'insieme degli interi minori di 102 essa, quindi, è un'endofunzione avente un unico punto fisso. Tale funzione fu ideata dall'informatico John McCarthy.
La Funzione 91 di McCarthy è definita come segue:
Esempi:
M(99) = M(M(110)) dato che 99 ≤ 100 = M(100) dato che 110 > 100 = M(M(111)) dato che 100 ≤ 100 = M(101) dato che 111 > 100 = 91 dato che 101 > 100
M(87) = M(M(98)) = M(M(M(109))) = M(M(99)) = M(M(M(110))) = M(M(100)) = M(M(M(111))) = M(M(101)) = M(91) = M(M(102)) = M(92) = M(M(103)) = M(93) .... continua = M(99) (come sopra) = 91
John McCarthy potrebbe aver scritto in questo modo la funzione, nel linguaggio di programmazione Lisp che lui stesso inventò: :
(defun mc91 (n) (cond ((<= n 100) (mc91 (mc91 (+ n 11)))) (t (- n 10))))
Segue la dimostrazione del comportamento descritto della funzione: Per 90 ≤ n < 101,
M(n) = M(M(n + 11)) = M(n + 11 - 10), poiché n >= 90 quindi n + 11 >= 101 = M(n + 1)
Di conseguenza M(n) = 91 per 90 ≤ n < 101.
Si può usare questo risultato come caso base per induzione su 11 numeri, in questo modo:
Si assuma che M(n) = 91 per a ≤ n < a + 11.
Allora, per ogni n tale che a - 11 ≤ n < a,
M(n) = M(M(n + 11)) = M(91), per ipotesi, dato che a ≤ n + 11 < a + 11 = 91, per il caso base.
Ora per induzione M(n) = 91 per ogni n in questo blocco. I blocchi così considerati sono adiacenti, senza spazi tra di loro, quindi M(n) = 91 per n < 101. Possiamo anche aggiungere n = 101 come caso speciale.
Codice
[modifica | modifica wikitesto]Ecco una implementazione dell'algoritmo ricorsivo in Java:
public static int M(int n){
return n>100?n-10:M(M(n+11));
}
Collegamenti esterni
[modifica | modifica wikitesto]- (EN) Eric W. Weisstein, McCarthy 91-Function, su MathWorld, Wolfram Research.