高手来帮我看看这个斐波那契非递归程序
#include <iostream>
using namespace std;
int main()
{
int n,a=1,b=2;
cout<<"Please input n:"<<endl;
cin>>n;
for(int i=0;i<n-1;i++)
{
a=b^a; b=b+a^b; a=a^a;
}
cout<<a<<endl;
return 0;
}
有一个警告,结果也不对,请求解决,我完全小白。不是本专业的,希望大家说详细点。谢谢
[解决办法]
没必要异或
#include <iostream>
using namespace std;
int main()
{
int n,t,a=1,b=2;
cout<<"Please input n:"<<endl;
cin>>n;
for(int i=0;i<n-1;i++)
{
t=b;
b=a+b;
a=b;
}
cout<<a<<endl;
return 0;
}
[解决办法]
- C/C++ code
#include <iostream> using namespace std; int main() { int n,a=1,b=2; cout<<"Please input n:"<<endl;cin>>n;for(int i=0;i<n-1;i++){ a=a+b; /// 交换a,b两个的值 a=a^b; b=b^a; a=a^b;}cout<<b<<endl; //应该输出b值return 0; }
[解决办法]
- C/C++ code
#include <iostream> using namespace std; int main() { int n,a=1,b=1; cout<<"Please input n:"<<endl;cin>>n;for(int i=0;i<n-1;i++){ a=a+b; /// 交换a,b两个的值 a=a^b; b=b^a; a=a^b;}cout<<b<<endl; //应该输出b值return 0; }
[解决办法]
[解决办法]
- C/C++ code
#include <iostream>using namespace std; int main(){ int n,a=1,b=1; cout<<"Please input n:"<<endl; cin>>n; for(int i=2/*不是0*/;i<n/*注意这里是小于*/;i++)//斐波那契数列的n是大于等于三的 { /* a=b^a; b=b+a^b; a=a^a; */ //菜鸟就别随便用异或,至少你要先理解异或是怎么来的 a=a+b; b=a^b; a=a^b; b=b^a; } cout<<b<<endl; //输出最后一位 return 0;}
[解决办法]
- C/C++ code
#include <iostream> using namespace std;int f(int n){ if(n<=0) { return 0; } else if(n == 1 || n == 2) { return 1; } else { int a=1; int b=1; int c; for(int i=3;i<=n;i++) { int a=1;//往前第二个数 int b=1;//往前第一个数 int c;//需要求的数 } return c; }}int main(){ cout<<f(3)<<endl; cout<<f(4)<<endl; cout<<f(5)<<endl; cout<<f(6)<<endl; cout<<f(7)<<endl; getchar(); return 0;}