所以here是任务。 我尝试使用这段代码:
#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();
}
当输入1或2时,我得到: &#34;您的号码1&#34; 。但是当我输入3,5或9时,我得到: &#34;你的号码11&#34;
抱歉我的英文。
答案 0 :(得分:0)
我认为你有-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);
}
我建议您在每个术语时按顺序使用递归,但是第一个术语的某些部分取决于之前的术语。
递归将为所有术语调用该函数,并将结果添加到内存中的堆栈。它比你的方式慢;特别是如果你想找到一个以上学期的答案。但在这里我觉得它更合适。
如果您认为int
对于结果来说太小,则可以使用long long
代替。
答案 1 :(得分:0)
您尝试解决任务的方式不正确。你只在内存中保留2个最后计算的元素,让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;
}