C++ c++;迭代组合函数不起作用
我有一个家庭作业问题,要求写一个迭代和递归组合函数。将它们放在一个给定的程序中,看看哪个需要更长的时间 我对迭代函数有一个问题。我已经检查了好几次,并且不断地得到一个mach-o-linker错误。我尝试了很多不同的方法来识别我的变量,但仍然没有找到任何运气 在此主题上的任何帮助都将不胜感激。我认为迭代器函数或阶乘函数有问题,但我现在无法看到它 再次提前感谢C++ c++;迭代组合函数不起作用,c++,function,loops,recursion,C++,Function,Loops,Recursion,我有一个家庭作业问题,要求写一个迭代和递归组合函数。将它们放在一个给定的程序中,看看哪个需要更长的时间 我对迭代函数有一个问题。我已经检查了好几次,并且不断地得到一个mach-o-linker错误。我尝试了很多不同的方法来识别我的变量,但仍然没有找到任何运气 在此主题上的任何帮助都将不胜感激。我认为迭代器函数或阶乘函数有问题,但我现在无法看到它 再次提前感谢 #include <iostream> #include <sys/time.h> #include <cs
#include <iostream>
#include <sys/time.h>
#include <cstdlib>
using std::cout;
using std::endl;
double iR;
double iN;
typedef unsigned int uint;
uint Factorial(uint n)
{
if (n == 0) return 1;
if (n <= 2) return n;
else return n * Factorial(n - 1);
}
double combination_recursive(double iN, double iR);
double combination_iterative(int iN, int iR);
int main(int argc, const char * argv[]) {
typedef struct timeval time;
time stop, start;
gettimeofday(&start, NULL);
iN = 20.0;
iR = 3.0;
combination_iterative(iN, iR);
gettimeofday(&stop, NULL);
if(stop.tv_sec > start.tv_sec)
cout << "Seconds: " << stop.tv_sec-start.tv_sec << endl;
else
cout << "Micro: " << stop.tv_usec-start.tv_usec << endl;
return 0;
}
double comination_iterative(int, int) {
if (iN == iR) { return 1;}
if (iR == 0 && iN!= 0) { return 1;}
else return (iN * Factorial(iN-1))/Factorial(iN-1)*Factorial(iN-iR);
}
double combination_recursive(double iN, double iR) {
if (iR < 0 || iR > iN) {
return 0;
}
if (iR < 1) {
return 1;
}
if (iN == iR) {
return 1;
}
return combination_recursive(iN - 1, iR) + combination_recursive(iN - 1, iR - 1);
}
#包括
#包括
#包括
使用std::cout;
使用std::endl;
双红外;
双进;
typedef无符号整数单元;
单位阶乘(单位n)
{
如果(n==0)返回1;
如果(n开始电视秒)
我想你的错误是因为一个简单的拼写错误
您可以在main中调用此函数
combination_iterative(iN, iR);
但你把它定义为
double comination_iterative(int, int) {
if (iN == iR) { return 1;}
if (iR == 0 && iN!= 0) { return 1;}
else return (iN * Factorial(iN-1))/Factorial(iN-1)*Factorial(iN-iR);
}
要解决此问题,只需更改函数定义以匹配调用
double combination_iterative(int, int) {
if (iN == iR) { return 1;}
if (iR == 0 && iN!= 0) { return 1;}
else return (iN * Factorial(iN-1))/Factorial(iN-1)*Factorial(iN-iR);
}
快乐编码与学习C++
您的函数名称有一个输入错误:
double comination_iterative(int, int)
double cobmination_iterative(int, int);
应该是
double combination_iterative(int, int)
您缺少主函数之前的正向定义:
double comination_iterative(int, int)
double cobmination_iterative(int, int);
修复此问题后,代码将编译
接下来,为了测量任何合理的时间,您应该在“平面循环”中调用您的测试函数更多次……例如,在一次迭代中调用8次。这样,您将避免仅用于循环的时间所带来的错误:
int i;
for(i=0;i<1000;i++)
{
combination_iterative(iN, iR);
combination_iterative(iN, iR);
combination_iterative(iN, iR);
//...
}
inti;
对于(i=0;我来谈谈stackoverflow。你能把你的例子精简到最低限度吗?这将改善问题,增加你得到有意义答案的机会。你能从错误控制台粘贴你的错误吗?请注意:
和iR
中的全局变量与函数参数不同iN
和iR
在combination\u recursive
的定义中。comination\u iterative
的定义完全忽略其参数,并使用全局iN
和iR
。感谢nio和paul。缺少的定义来自于尝试不同的方式传递参数。但是我完全错过了拼写错误。我觉得自己很傻。我必须戴眼镜……当你觉得自己找到了最好的答案时,一定要接受答案。