카테고리 없음
[C ++] 이 재귀가 분할 오류를 제공하는 이유는 무엇입니까?
필살기쓰세요
2021. 1. 22. 17:38
다음은 사용해야하는 코드입니다.
#include <iostream>
using namespace std;
int sum_to(int value)
{
if(value <= 1)
return 1;
return sum_to(value-1) + value;
}
int main()
{
int value = 5;
std::cout << "sum to " << value << " is " << sum_to(value) << '\n';
return 0;
}
중간 상태를 인쇄
temp
하려면 중간 결과를 저장하고 인쇄 할 변수가 하나 더 필요 합니다.
#include <iostream>
using namespace std;
int sum_to(int value)
{
if(value <= 1)
return 1;
int temp = sum_to(value-1) + value;
std::cout << "sum to " << value << " is " << temp << '\n';
return temp;
}
int main()
{
int value = 5;
std::cout << "sum to " << value << " is " << sum_to(value) << '\n';
return 0;
}
문제는 항상 똑같기
sum_to
때문에하지 말아야 할 곳에서 전화를 거는
value
것이 었습니다.
int sum_to(int value)
{
std::cout << "sum to " << value << " is " << sum_to(value) << '\n';
if(value <=1) { ^^^^^^^^^^^^^ this call
return 1;
}
else {
return sum_to(value-1) + value;
}
}
-------------------
종료 조건을 확인
하기 전에
무한 재귀 가 있습니다. 다시
std::cout
호출하지 않도록 변경하십시오
sum_to
.-------------------
else
신체를 다음으로 대체 할 수 있습니다 .
int intermediate = sum_to(value-1) + value;
cout << "Intermidiate: " << intermediate << endl;
return intermediate;
-------------------
다음과 같은 몇 가지 개선 사항이 있습니다.
- 첫 번째 cout을 제거하여 끝없는 재귀를 제거하십시오.
- 재귀 호출 후 log / cout을 추가합니다.
int sum_to(int value) { if(value <=1) { return 1; } else { int result = sum_to(value-1); cout << "Sum to " << (value-1) << " is " << result << '\n'; return result + value; } }
출처
https://stackoverflow.com/questions/39917078