C++ 输出序列的第n个元素

C++ 输出序列的第n个元素,c++,sequence,C++,Sequence,这项任务也是如此。 我尝试使用以下代码: #include <iostream> #include <istream> #include <conio.h> #include <math.h> using namespace std; int main(){ int i, n; cout<<"enter n "; cin>>n; if(n==1||n==2){ i=1

这项任务也是如此。 我尝试使用以下代码:

#include <iostream>
#include <istream>
#include <conio.h>
#include <math.h>
using namespace std;

int main(){
    int i, n;
    cout<<"enter n ";
    cin>>n;
    if(n==1||n==2){
            i=1;
            cout<<"\n your number "<<i;
        } 
    else {
        for(i=3;i<=n;i++){
            i=(i-1)-4*(i-2);
        }
        cout<<"\n your number"<<i;
    }
    getch();
}
#包括
#包括
#包括
#包括
使用名称空间std;
int main(){
inti,n;
coutn;
如果(n==1 | | n==2){
i=1;

我想你得到了-3票,因为你想让我们找出你代码中的错误

对于您的问题,您可以使用递归:

int f(int x)
{
if(x==1||x==2)
    return 1;
else
    return =f(x-1)-4*(x-2);
}
int main(){
int x;
cin>>x;
cout<<f(x);
}
intf(intx)
{
如果(x==1 | | x==2)
返回1;
其他的
返回=f(x-1)-4*(x-2);
}
int main(){
int x;
cin>>x;

cout您试图解决任务的方法是不正确的。您应该在内存中只保留最后计算的两个元素,让x(i-1)是a,x(i-2)是b。然后您计算下一个值,在下一次迭代中,它将是x(i-1)+将上一个x(i-1)移动到x(i-2)-因此您的算法只使用恒定的内存量。代码如下:

int calc(int n) {
  int a = 1, b = 1;
  for(n -= 2; n > 0; --n) {
      int tmp = a - 4 * b;
      b = a;
      a = tmp;
  }
  return a;
}

(i-1)
没有给出前面的值…我没有足够的声誉来评论前面的答案,但事实上,使用递归(如果不是尾部递归)的解决方案使用堆栈内存,并且它的数量是非常量+有一个错误:f应该返回f(x-1)-4*f(x-2)