2017-10-31 1 views
-1

이 함수로 벡터의 마지막 요소를 추가하는 방법을 혼동합니다. 함수 매개 변수를 수정할 수 없습니다.벡터의 모든 요소의 합계를 반환하는 재귀 함수

long vectorSum(const std::vector<int>& data, unsigned int position) 
{ 
    if (position == data.size()-1) 
    { 
     return 0; 
    } 
    else 
    { 
     return (vectorSum(data, position+1) + data[position]); 
    } 
} 

int main() 
{ 
    //vectorSum test 
    std::vector<int> data = { 1,2,3,4,5}; 
    unsigned int pos = 0; 
    std::cout << "expected: 15, " << "actual: " << vectorSum(data, pos) << std::endl; 

} 

답변

3

당신은 당신이 마지막 요소보고있는 마지막 항목

long vectorSum(const std::vector<int>& data, unsigned int position) 
{ 
    if (position == data.size()) // You were stopping early 
    { 
     return 0; 
    } 
    else 
    { 
     return (vectorSum(data, position+1) + data[position]); 
    } 
} 

int main() 
{ 
    //vectorSum test 
    std::vector<int> data = { 1,2,3,4,5}; 
    unsigned int pos = 0; 
    std::cout << "expected: 15, " << "actual: " << vectorSum(data, pos) << std::endl; 

} 
+0

오 마이 맙소사! 그것은 두뇌 방귀이었다! 하나님이 도와주세요! 하하, 고마워! – Hanna369

1

의 값을 계산하지 않고 당신이 vectorSum(data, data.size()-1) 0을 반환하는 data.size() -1에서 중지 할 때, 당신은이 조건을 가지고 :

이 시점에서
if (position == data.size()-1) 

, position4이며, data.size()5입니다. 조건이 일치하고 재귀가 끝납니다. 정지 상태와 재귀 :

당신은 ==>에를 변경하거나 -1

1

항상 재귀 함수 두 부분이 있습니다 드롭해야합니다. 여기에 간단한 정지 조건이 있습니다 : 벡터에 요소가없는 경우 합계는 0입니다. 재귀는 비어 있지 않은 벡터의 요소 합계가 첫 번째 요소의 값과 나머지 요소의 합계입니다 . 코드에서 정지 조건은 다음과 같습니다

코드에서
if (position == data.size()) 
    return 0; 

는, 재귀는 다음과 같습니다

else 
    return data[position] + vectorSum(data, position + 1); 

약간 더 정교한 정지 조건이 될 것입니다 다음에 정확히 하나 개의 요소가있을 때 벡터의 합계는 해당 요소의 값입니다. 코드에서 :

if (position == data.size() - 1) 
    return data[position]; 

이것은 재귀 수준이 한 단계 낮습니다. 그러나 빈 벡터에 대해서는 작동하지 않습니다. 그러니 독을 선택하십시오.

원래 코드의 문제는 정지 조건이 올바르게 구현되지 않았기 때문입니다. 이 두 정지 조건을 상호 혼합합니다.

관련 문제