数学方程在C ++中递归求解

时间:2016-11-27 18:46:31

标签: c++ recursion

我有一个任务是制作一个代码,它会写出100个第一个数字的等式(或函数,我不知道这是什么)

#include <iostream> using namespace std; int rekurzija(int n){ if(n=1){ return 1; } if(n=2){ return 1; } if(n>2){ return rekurzija(n-1)*rekurzija(n-1)-n*rekurzija(n-2); } } int main(){ for(int n=1;n<101;n=n+1){ cout << rekurzija(n) << endl; } }

必须以递归方式解决。到目前为止我已经编写了这段代码

1

问题是程序返回template class CcmFilter<FooBlock>; 百次而不是1,1,-2,0,......(而不是实际解决此函数)。这段代码有什么问题?

2 个答案:

答案 0 :(得分:6)

您在=条件==函数中使用simple assignment operator rekurzija()代替Is equals to relational operator if

if(n = 1) //here `n = 1`is an assignment statement
{
    //something...
}

如果您使用=代替==会怎样?

如果赋值语句中的赋值为非零数,则if条件将始终求值为true

注意:对零的分配评估为false,即对于if(n = 0),不会输入if块。您的代码中没有任何此类if块。

因此,您的第一个if始终被评估为true,因为您正在指定一个非零值,即1,因此您的函数始终返回1。这就是为什么你得到100 1作为答案的原因。

因此,请尝试将所有if条件更改为:

if(n == 1)
{
    //something...
}

这会检查n是否等于1。如果n等于1,则输入if块,否则它将不会进入if块并检查下一个if条件。< / p>

注意:在使用===运营商时,请记住这一点

  • =适用于作业
  • ==用于比较

答案 1 :(得分:0)

当你用C ++比较事物时,你需要这样做:

if (a == b)

而不是

if (a = b)

后者将b分配给a并返回a。

的值