C++递归求解数学方程

C++递归求解数学方程,c++,recursion,C++,Recursion,我有一个任务,要做一个代码,可以写出100个方程或函数的第一个数字,我不知道这是什么 An=An-1^2-n*An-2,其中A1=1,A2=1 它必须递归求解。到目前为止,我已经编写了这段代码 #include <iostream> using namespace std; int rekurzija(int n){ if(n=1){ return 1; } if(n=2){ return 1; } if(n&

我有一个任务,要做一个代码,可以写出100个方程或函数的第一个数字,我不知道这是什么

An=An-1^2-n*An-2,其中A1=1,A2=1

它必须递归求解。到目前为止,我已经编写了这段代码

#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;
    }
}
问题是程序返回100次,而不是1,1,-2,0,…而不是实际求解此函数。这段代码有什么错误?

在if条件的rekurzija函数中使用的是=而不是==

if(n = 1) //here `n = 1`is an assignment statement
{
    //something...
}
如果使用=而不是==,会发生什么

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

注:赋值为零的计算结果为假,即如果ifn=0,则不会输入if块。代码中没有任何这样的if块

因此,第一个if总是被计算为true,因为您分配了一个非零值,即1,因此您的函数总是返回1。这就是为什么你的答案是100个1

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

if(n == 1)
{
    //something...
}
这将检查n是否等于1。如果n等于1,则输入If块,否则将不输入If块,并检查下一个If条件

注意:在使用=和==运算符时请记住这一点

=用于分配 ==用于比较
当你在C++中比较事物时,你需要这样做:

if (a == b)
而不是

if (a = b)

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

这不是问题的根源,但您确实不想调用函数两次来完成平方运算。调用它一次,将结果存储在result中,然后使用result*result。您的CPU将为此感谢您。