C++递归求解数学方程
我有一个任务,要做一个代码,可以写出100个方程或函数的第一个数字,我不知道这是什么 An=An-1^2-n*An-2,其中A1=1,A2=1 它必须递归求解。到目前为止,我已经编写了这段代码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&
#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将为此感谢您。