2016-06-08 3 views
0

재귀를 사용하여 reduce 함수를 작성하려고합니다. 재귀와 그 운동의 일부를 배울 것이므로 임은 내 코드에서 작동하지 않는 것을 이해하려고합니다. 어떤 도움도 행복하다! 시. 자신이 편곡 ((예를 들어 예치 어이가되도록)재귀 감소 함수를 작성하는 방법은 무엇입니까?

var strings = function(previous,current) { 
    return previous+current; 
}; 

function reducing(arr,start,func) { 

    if (arr.length == 0) { 
     return start; 
    } 
    else if (arr.length == 1) { 
     return arr[0]; 
    } 
    else { 
     return func(start,arr[arr.length-1]) + reducing(arr.slice(1),start,func); 
    } 
} 

reducing(['y','e','h'],'',strings) 

답변

1

이, 문제가 될 수 대신 줄이는 (arr.slice (1), 시작 FUNC) 줄여보십시오 배열의 끝에서 시작하는 가정 .slice는 (0, arr.length-1), 시작 FUNC) 아래 :

function reducing(arr,start,func) { 
    if (arr.length == 0) { 
    return start; 
    } 
    else if (arr.length == 1) { 
    return arr[0]; 
    } 
    else { 
    return func(start, arr[arr.length-1]) + reducing(arr.slice(0, arr.length -1),start,func); 
} 
} 
+0

죄송합니다, 나는 그것을 수정 코드에 무슨 문제가 있나요. 첫 번째 요소를 사용할 때는 첫 번째 요소를 제거해야하지만, 아래 요소를 사용할 때는 array에서 맨 아래 요소를 제거해야합니다. –

0

또 다른 해결책 :

const reduce = (arr, fn, initial) => 
    (reduceAux = (index, value) => 
    index > arr.length-1 
     ? value 
     : reduceAux(index+1, fn(value, arr[index], index, value)) 
)(0, initial); 
관련 문제