0
所以我試着找出解決這個問題的辦法,但是我的程序表現得很奇怪。#12歐拉項目:找到超過500個因子的第一個三角形數
#include <iostream>
using namespace std;
int triangle_numbers(int n, int meh = 0)
{
int count = 0;
//calculate how many divisors there are for meh
for(int i = 1; i <= meh; i++)
if(meh%i == 0)
count++;
//if the number of divisors for meh is over 500, return meh
if(count > 500)
return meh;
//recursive call to increment n by 1 and set meh to the next triangle number
triangle_numbers(n+1, meh += n);
}
int main()
{
int cc = triangle_numbers(1);
cout << cc << endl;
}
如果我輸出meh
和count
單獨我得到準確的結果,所以我不知道爲什麼我的計劃是給我同樣的號碼(4246934),即使我做,說,if(count > 10)
。我有一種感覺,它可能與我的遞歸調用,但我迄今嘗試過的一切都沒有奏效。任何幫助?
謝謝。我只是覺得回到這裏就足以結束這個電話。儘管現在這個工作正常,而且我已經提到了你所提到的優化,但我的經驗是需要很長時間才能完成。會使這個函數尾遞歸幫助嗎? – 2012-08-16 22:05:54
@BobJohn:該函數已經是尾遞歸的,所以沒有。通過保持呼叫之間的功能以避免不止一次計算相同結果([動態編程](http://en.wikipedia.org/wiki/Dynamic_programming)),並同時應用更多數學。第n個三角形數可以直接用'n *(n + 1)/ 2'來計算,這在我們試圖計算其因子時非常有用。 – Jon 2012-08-17 07:47:13