0
이것은 오일러 # 60을 해결하려고하는 재귀 솔버입니다. http://projecteuler.net/problem=60 솔버가 실행되지만 마지막 배열 멤버에 대한 솔루션을 찾을 수 없으므로 역 추적이 가능합니다. 그러나 첫 번째 배열 멤버로 되돌아 가면 루프가 끝까지 실행됩니다. 아무도 내게 자리를 물려서 다음 주요한 시점에서 멈추지 않는 이유는 무엇일까요?재귀가 제대로 작동하지 않음
아래의 솔버 기능을 게시했습니다. 다른 함수 (Concat check)는 제대로 작동하고 부분적으로 채워진 배열에 대해 true를 반환합니다.
int Solver (int primes[5])
{
int i=1;
int x=0;
while (primes[x]!=0) {++x;} //work on the next one
if ((x>5) && Concat_Check(primes)) {return 1;} //solved array
for (i=3; i<=SIZE; i++) //try each value, if successful, return true
{
if (Is_Prime(i)) {primes[x]=i; cout<<"primes["<<x<<"] = "<<i<<endl;}
if ((Concat_Check (primes)) && Solver (primes)) {return 1;}
}
primes[x-1] = 0;
return 0;
}
내가 찾은 다음 소수는 이제 작동하지만 궁극적으로 솔루션으로 끝나기 때문에 재귀가됩니다. 나는 당신의 이중 증가 아이디어를 좋아한다 - 심지어 짝수에 루프를 낭비하지 말라! –