gpt4 book ai didi

c++ - #12 欧拉计划 : Find the first triangle number with over 500 divisors

转载 作者:行者123 更新时间:2023-11-28 00:54:58 24 4
gpt4 key购买 nike

所以我尝试找出这个问题的解决方案,但我的程序表现得很奇怪。

#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;
}

如果我单独输出 mehcount 我会得到准确的结果,所以我不确定为什么我的程序会给我相同的数字 (4246934),即使我做,比方说,if(count > 10)。我觉得这可能与我的递归调用有关,但到目前为止我尝试过的一切都没有奏效。有帮助吗?

最佳答案

您缺少完成递归所需的最终 return 语句(编译器不会警告 triangle_numbers 实际上并非在所有情况下都返回某些内容吗?)。

一旦 meh 的最终值被计算出来,您需要有

return triangle_numbers(n+1, meh += n);

这样 meh 就可以一直返回到调用堆栈,最后返回到 main

您现在看到的数字可能是递归结束后留在堆栈中的值。

旁注:此算法中的经典优化是让 i 迭代到 meh/2 但不再进一步。显然,大于 meh 一半的数字不能均分,因此可以跳过。

关于c++ - #12 欧拉计划 : Find the first triangle number with over 500 divisors,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11995994/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com