Função de Ackermann e Sequência de Mewman-Conway
; Exercicio 12.1 - Função de Ackermann
;
; Exercício resolvido por: Rui Maia <deathseeker25(at)portugal-a-programar(dot)org>
;
; Escreva em Scheme um procedimento para calcular a função de Ackermann, sabendo que
; esta é definida para inteiros não negativos, recorrendo à recursividade.
(define Ackermann
(lambda (m n)
(cond ((= m 0)
(+ 1 n))
((and (> m 0) (= n 0))
(Ackermann (- m 1) 1))
((and (> m 0) (> n 0))
(Ackermann (- m 1) (Ackermann m (- n 1)))))))
;Testes:
;
; > (Ackermann 3 4)
;125
;> (Ackermann 4 4)
; user break
;> (Ackermann 3 5)
;253
;> (Ackermann 3 6)
;509
;> (Ackermann 3 12)
; user break
;
; Exercício 12.2 - Sequência de Mewman-Conway
; Escreva em Scheme um procedimento para calcular o n-ésimo número na sequência Mewman-Conway.
(define Mewman-Conway
(lambda (n)
(cond ((or (= n 1) (= n 2))
1)
((> n 2)
(+ (Mewman-Conway (Mewman-Conway (- n 1))) (Mewman-Conway (- n (Mewman-Conway (- n 1)))))))))
;Testes:
;
;> (Mewman-Conway 1)
;1
;> (Mewman-Conway 2)
;1
;> (Mewman-Conway 3)
;2
;> (Mewman-Conway 4)
;2
;> (Mewman-Conway 5)
;3
;> (Mewman-Conway 10)
;6
;> (Mewman-Conway 20)
;12
;> (Mewman-Conway 40)
;user break