C++ 哪种方法生成斐波那契级数更好
斐波那契级数生成的两种一般方法是:C++ 哪种方法生成斐波那契级数更好,c++,fibonacci,C++,Fibonacci,斐波那契级数生成的两种一般方法是: 方法,即在函数内运行for循环 递归 我找到了另一个解决办法 #include <iostream> using namespace std; void fibo() { static int y = 0; static int x = 1; cout << y << endl; y = x + y; x = y - x; } int main() { for (int i = 1; i <= 1;
#include <iostream>
using namespace std;
void fibo() {
static int y = 0;
static int x = 1;
cout << y << endl;
y = x + y;
x = y - x;
}
int main() {
for (int i = 1; i <= 1; i++) {
fibo();
}
return 0;
}
#包括
使用名称空间std;
void fibo(){
静态int y=0;
静态int x=1;
我可以立即看到:
- 通过本质上使状态全局化,它不是线程安全的
- 您只能在序列中运行一次,因为无法重置
<>我希望有一种方法,它可以将状态保持在一个对象中,它基本上可以要求迭代器的下一个值。(我从来没有确定Fibonacci序列如何容易地映射到C++迭代器,它用C和java的代码> iQueabd和<代码>迭代< <代码>很好。我认为这种指针方法对您更有用
void main()
{
int i,p, *no,factorial,summ;
int fib(int p);
clrscr();
printf("\n Enter The Number:");
scanf("%d", no);
printf("\n The Fibonnacci series: \n");
for(i=0; i < *no; i++)
printf("%d\n", fib(i));
getch();
}
int fib(int p)
{
if(p == 0)
return(0);
if(p >= 1 && p <= 2)
return(1);
else
return(fib(p - 1) + fib(p - 2));
}
void main()
{
整数i,p,*no,阶乘,求和;
int-fib(int-p);
clrsc();
printf(“\n输入数字:”);
scanf(“%d”,否);
printf(“\n Fibonnacci系列:\n”);
对于(i=0;i<*否;i++)
printf(“%d\n”,fib(i));
getch();
}
int fib(int p)
{
如果(p==0)
返回(0);
如果(p>=1&&p当您需要存储状态时,您找到的解决方案是合适的(例如,当您计算斐波那契数时,根据它做一些事情,然后计算另一个),但在代码中的两个位置使用它可能会产生有趣的结果。这是因为静态变量总是相同的,无论从何处调用它。我建议:
class FiboNumbers {
public:
FiboNumbers() :
x_(1), y_() {}
int getNext() {
x_ += y_;
y_ = x_ - y_;
return x_;
}
private:
int x_, y_;
};
这提供了相同的状态保持,但允许创建类的多个实例,因此允许代码的不同部分计算它们自己的斐波那契级数
#include<iostream>
using namespace std;
void fibseries(long int n)
{
double x=0;double y=1;
for (long int i=1;i<=n;i++)
{
if(i%2==1)
{
cout<<x<<" ";
x=x+y;
}
else
{
cout<<y<<" ";
y=x+y;
}
}
}
main()
{
long int n=0;
cout<<"The number of terms ";
cin>>n;
fibseries(n);
return 0;
}
次要提示:我发布的代码将生成与您发布的示例相同的序列,但它将生成真正的斐波那契序列,该序列从0 1 1 2开始…我不确定此函数真正应该做什么。它
只有在您当前的确切循环中才起作用,就像其他人一样
他指出,它只工作一次。(而且可能是打字错误。)
在循环中,由于整个程序输出“0”
,并且
除此之外,它还有什么优势:
int y = 0;
int x = 1;
for ( int i = 0; i < count; ++ i ) {
std::cout << y <<std::endl;
y = x + y;
x = y - x;
}
inty=0;
int x=1;
对于(int i=0;i 正如前面所说,静态变量的优点是,原则上,在已经计算了第n-1个元素的序列中,计算第n个元素更便宜
除了静态变量固有的问题外,最大的缺点是,您没有任何方法返回序列中的较早点,也无法很好地控制在给定时间序列中的位置
使用Sevis推荐的类
,无疑是实现这种类似静态的方法的更好方法:这使一切更加安全,为您提供了一种返回序列开始的简单方法(只需重新初始化对象)还可以实现进一步的功能,比如返回k步,查找当前位置等。 < P>我是C++学生(1.5个月)。
给我反馈我对斐波那契数列的不同想法
#include<iostream>
using namespace std;
void fibseries(long int n)
{
double x=0;double y=1;
for (long int i=1;i<=n;i++)
{
if(i%2==1)
{
cout<<x<<" ";
x=x+y;
}
else
{
cout<<y<<" ";
y=x+y;
}
}
}
main()
{
long int n=0;
cout<<"The number of terms ";
cin>>n;
fibseries(n);
return 0;
}
#包括
使用名称空间std;
空值系列(长整数n)
{
双x=0;双y=1;
对于(long int i=1;i如果要重新启动序列,会发生什么情况?只有在缓存结果或只需要序列一次时,这才真正有用。让你作为第一个回答我问题的人满足了我一年的胃口!!:D非常严肃地说……我同意,这绝对不是线程安全的,而且序列不可能被重新启动e-run…-ivara关于优点/缺点的答案在哪里?如果有的话,还可以查看一些关于如何使用scanf的示例。Markus,这可能是我对这个问题的误解,对此表示抱歉..thanx用于提醒我“scanf”语法(“,@”)…这是一个错误的答案,因为主函数具有非标准返回类型,使用非标准函数,并导致未定义的行为,因为no
在未初始化的情况下使用。最重要的是:fib
函数的实现具有指数运行时间(和线性堆栈空间使用)只有当你对问题有一个确定的答案时,它才比OP.post链接的“传统方法”更可取。从你的帖子上看,你似乎在提出另一个问题,而不是在这里回答。答案部分不是用来提出问题的