【发布时间】:2011-07-12 02:39:26
【问题描述】:
我编写了这个函数,它应该找到可以被每个数字 1 到 20 整除的最小正整数。我得到“堆栈溢出错误”,尽管当我测试数字 1 到 10 时,它工作得很好。 这是我的代码:
#include<iostream>
#include<cstdlib>
using namespace std;
// function prototype
int smallPos(int k, int m,int n);
int main(){
printf("the smallest positive number that is divisible by 1 through 20 is %d ", smallPos(1,1,13));
}
int smallPos(int k, int n, int m){
int div=0;
for(int i = n;i<=m;i++) {
if (k%i==0)
div++;
}
if (div==m) {
return k;
} else {
k+=1;
smallPos(k,n,m);
}
}
为什么会这样?无论如何,这个数字不应该那么大。 谢谢!
【问题讨论】:
-
为什么这甚至被实现为递归函数?
-
这是我能想到的解决方案。我尝试使用嵌套循环但感到困惑。
-
您可以在第一次失败时为自己节省一些循环和递归:
for(int i = n; i <= m; i++) if(k % i) return smallPos(k + 1, n, m); return k;但堆栈溢出仍然存在。 -
有人在做欧拉项目
-
@GKED:用可行的解决方案更新了我的答案。