所以我尝试找出解决这个问题的方法,但我的程序表现得非常奇怪。
#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),即使我这样做,例如{{ 1}}。我觉得它可能与我的递归调用有关,但到目前为止我尝试过的所有内容都没有用。有什么帮助吗?
答案 0 :(得分:3)
您缺少完成递归所需的最终return
语句(编译器是否警告triangle_numbers
实际上并未在所有情况下返回某些内容?)。
计算出meh
的最终值后,您需要
return triangle_numbers(n+1, meh += n);
这样meh
可以一直返回到调用堆栈,最后返回main
。
您现在看到的数字可能是递归结束后堆栈上剩余的值。
旁注:此算法中的经典优化是让i
迭代到meh / 2
但不再进行。显然,大于meh
一半的数字不能均匀分割,因此可以跳过它们。