我有一个任务是制作一个代码,它会写出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,......(而不是实际解决此函数)。这段代码有什么问题?
答案 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。
的值