사용

2017-12-05 2 views
0

I는, t = 3사용

p(t) = 0.5p(t-1) + 0.2p(t-2) 

로 정의 R에서 재귀 함수를 해결하려는 ..., 100, 초기 값은 p(1), p(2)입니다.

나는이 그냥 여기이 같은 for 루프를 사용하여 해결할 수있을 것이라고 알고 : 나는 R의 lapply() 기능을 사용하여이 또한 수 있는지 궁금하네요 Using R to solve a recursion function

? 나는 그것이 어쨌든 가능해야한다고 생각하지만, 어디서부터 시작해야할지 모른다. 나는 어떤 힌트라도 주시면 감사하겠습니다.

+0

'lapply'는 for 루프 구조와 유사하게 작동합니다. 리스트 오브젝트를 반복 처리하고 처리하여 목록으로 만 리턴합니다. – TUSHAr

+1

도움말 ("축소")을보십시오. – Roland

+1

잘 모르겠지만'accumulate = TRUE' 인수로'Reduce'를 사용할 수 있습니다. 'Reduce (function (x, y) y = 0.5 * x + 0.2 * x, 3 : 100, 누적 = TRUE) 행에있는 것' – Sotos

답변

0

물론 lapply와 함께 재귀 함수를 사용할 수 있습니다. 이 지수 복잡성이 될 것입니다 있기 때문에, 메모이 제이션의 일종없이이 문제에 대한 재귀 함수를 사용하는 것이 좋은 생각이다

p <- function(t){ 
    if(t == 1){ return(1) } # arbitrary number 
    if(t == 2){ return(2) } # arbitrary number 

    return(0.5*p(t-1) + 0.2*p(t-2)) 
} 

lapply(3:100, p) 

참고.

다음 코드 대신 선형 시간에 작동합니다

p_tab <- c(1, 2, rep(-1, 98)) # 1 and 2 arbitrary numbers 
p <- function(t){ 
    if(p_tab[t] != -1) return(p_tab[t]) 

    p_tab[t] <<- 0.5*p_tab[t-1] + 0.2*p_tab[t-2] 
} 

p_tab <- unlist(lapply(1:100, p)) 

p_tab는 당신이 필요로하는 숫자로 채워집니다. 예를 들어, p_tab[100]p(100) 일 것입니다.

+0

그게 정확히 내가 필요했던 것, 정말 고마워요 !! –

+0

도움이 되니 기쁩니다! 답변을 수락하는 것을 고려하십시오. :) –