이것은 n < 3이고 f (n) = f (n-1) + 2f (n-2) + 3f라면 함수 f (n) = n에 대한 재귀 프로 시저이다. (n - 3) n ≥ 3 일 경우Scheme : 반복적 인 프로세스를 반복적 인 것으로 바꾼다
(define (f n)
(if (< n 3)
n
(+ (f (- n 1))
(* 2 (f (- n 2)))
(* 3 (f (- n 3))))))
문제는 반복적 인 재귀로 변경하는 것입니다. 나는이 함께했다 : 이것에
> (f 3)
4
> (f 4)
11
> (f 5)
25
> (g 3)
6
> (g 4)
19
> (g 5)
45
>
지출 시간,하지만 난 내가 잘못 뭘하는지 볼 수 없습니다 :
(define (g n)
(if (< n 3)
n
(g-helper n)))
(define (g-helper n)
(if (< n 3)
n
(+ (basemaker 0 1 (- n 1))
(g-helper (- n 1))
(* 2 (basemaker 0 2 (- n 2))
(g-helper (- n 2)))
(* 3 (basemaker 0 3 (- n 3))
(g-helper (- n 3))))))
(define (basemaker counter constant n)
(cond ((= 2 n) 2)
((= 1 n) 1)
((= 0 n) 0)
(else
(basemaker (+ counter constant) constant (- n constant)))))
뭔가 잘못된 것입니다. 코드가 반복적이고 까다 롭다는 것을 알고 있지만 구문을 개선하기 전에 프로세스에 대해 이해하지 못했던 것을보고 싶습니다.
감사합니다. 몸 안에 "마지막"전화 자체 g-helper
에하지, +
의 때문에
도움 주셔서 감사합니다. 나는 아직이 시간으로 돌아갈 시간이 없었지만 반복에 대해 생각하는 방법에서 볼 수 있습니다. – Nufdriew