2013-08-29 80 views
0

這是一個試圖解決歐拉#60的遞歸求解器。 http://projecteuler.net/problem=60 求解器運行通過,但未能找到最後一個數組成員的解決方案,所以回溯(就像我認爲它應該這樣),但是當我回到第一個數組成員時,循環會一直運行。任何人都可以找到我爲什麼它不停止在下一個黃金?遞歸不能正常工作

我已經發布了下面的求解器函數;另一個函數(Concat檢查)正常工作,對於部分填充的數組返回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; 
} 

回答

0

我不能讓遞歸的在你的代碼的目的,似乎是一個環...... 不管怎麼說,也許你忘了循環遞增x,測試似乎不完整。

for (i=3; i<=SIZE; i+=2) //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;} 
    } 
} 
+0

我在遞歸,因爲我發現的下一個素數可能現在可以工作,但不會最終成爲解決方案。我喜歡你的雙重增量理念 - 沒有任何意義上浪費偶數的循環! –