Ola,
Sera que alguem me poderia ajudar e mostrar-me (com uma explicacao se possivel :confused
como posso obter uma nova versao do procedimento abaixo, mas gerando um processo iterativo em vez de recursivo. Obrigado
Código:
(define (soma x)
(if (= x 0)
x
(+ (transforma x) (soma (- x 1)))))
Precisas de uma função auxiliar que tenha um argumento adicional que guarde o resultado actual.
Depois mais chamando essa função actualizando o resultado a cada chamada.
Obrigado pela resposta.
Sera que nao me poderias escrever 1 ou 2 linhas, para eu tentar perceber.
a ver se consigo fazer depois de engrenar
obg
Algo do tipo:
Código:
(if (= x 0)
resultado
(soma (- x 1) (+ resultado (transforma x))))
Código:
(define soma2 (lambda (x) (resultado)))
(if (= x 0)
resultado
(soma (- x 1) (+ resultado (transforma x))))
assim esta correcto?
este e o prog completo:
Código:
(define (transforma x)
(if (even? x) (* x x)
(* 3 x) ))
(define (soma x)
(if (= x 0)
x
(+ (transforma x) (soma (- x 1)))))
(define soma2 (lambda (x) (resultado)))
(if (= x 0)
resultado
(soma2 (- x 1) (+ resultado (transforma x))))
esta.me a dar um erro (reference to undefined identifier: x) no x do segundo if.
Podes.me ajudar
. Estou a tentar, mas estou um pouco confuso.
Para que é esse lambda? Porque é que não fazes como tens feito na outra função?
Código:
(define (transforma n)
(if (even? n) (* n n)
(* 3 n)))
(define (soma n)
(if (= n 1)
3
(+ (transforma n) (soma (- n 1)))))
(define (soma2 n)
(if (= n 0)
0
(+ (soma (- n 1)) (+ 0 (transforma n)))))
Podem-me dizer se este código está bem feito? Os valores de soma e soma2 saem iguais, mas é para confirmar a sintaxe. Obrigado.
Se corre é porque a sintaxe está correcta.
basicamente, o que vocês querem é este codigo
Código:
(define (transforma n)
(if (odd? n)
(* 3 n)
(expt n 2)))
(define (soma n)
(cond ( (or (not (integer? n))
(<= n 0))
(error "inserir n inteiro positivo"))
( (= n 1) (transforma n))
(else (+ ((soma (- n 1)) (transforma n))))))
(define (soma-aux n soma-ac)
(cond ( (or (not (integer? n))
(<= n 0))
(error "inserir n inteiro positivo"))
( (= n 1) (+ (transforma n) soma-ac))
(else (soma-aux (- n 1) (+ soma-ac (transforma n))))))
(define (soma n) (soma-aux n 0))
Isto foi o trabalho de casa de Fp ... LEIC alameda
Cumprimentos
Excelente curso, esse.