Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c++;迭代组合函数不起作用_C++_Function_Loops_Recursion - Fatal编程技术网

C++ c++;迭代组合函数不起作用

C++ c++;迭代组合函数不起作用,c++,function,loops,recursion,C++,Function,Loops,Recursion,我有一个家庭作业问题,要求写一个迭代和递归组合函数。将它们放在一个给定的程序中,看看哪个需要更长的时间 我对迭代函数有一个问题。我已经检查了好几次,并且不断地得到一个mach-o-linker错误。我尝试了很多不同的方法来识别我的变量,但仍然没有找到任何运气 在此主题上的任何帮助都将不胜感激。我认为迭代器函数或阶乘函数有问题,但我现在无法看到它 再次提前感谢 #include <iostream> #include <sys/time.h> #include <cs

我有一个家庭作业问题,要求写一个迭代和递归组合函数。将它们放在一个给定的程序中,看看哪个需要更长的时间

我对迭代函数有一个问题。我已经检查了好几次,并且不断地得到一个mach-o-linker错误。我尝试了很多不同的方法来识别我的变量,但仍然没有找到任何运气

在此主题上的任何帮助都将不胜感激。我认为迭代器函数或阶乘函数有问题,但我现在无法看到它

再次提前感谢

#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。缺少的定义来自于尝试不同的方式传递参数。但是我完全错过了拼写错误。我觉得自己很傻。我必须戴眼镜……当你觉得自己找到了最好的答案时,一定要接受答案。