关于C++斐波那契数列的问题

Samerol_Jomior 2013-09-11 08:25:48
#include<iostream>
using namespace std;
int Fibo(int N)
{
int i;
int str[50];
str[0] = 1;
str[1] = 1;
for(i = 2; i < N; i++)
{
str[i] = str[i - 1] + str [i - 2];
}
return str[N - 1];
}

int main()
{
int N;
cin>>N;
cout<<Fibo(N)<<endl;
return 0;
}


这是楼主的代码。。输出第N个斐波那契数列的数值,可是第50个就是负数了。。是怎么回事呢??
...全文
214 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Samerol_Jomior 2013-09-11
  • 打赏
  • 举报
回复
引用 6 楼 ananluowei 的回复:
[quote=引用 5 楼 u011144614 的回复:] 非常感谢。。我是刚刚学习C++,请问前辈这个delete[] str有什么用?
函数中new[]了一个数组,那么最好是在函数返回前delete[]释放掉。否则就是内存泄漏。 等你学到动态数组的时就会明白。[/quote] 非常感谢。。可惜分不多。。感谢
大尾巴猫 2013-09-11
  • 打赏
  • 举报
回复
引用 5 楼 u011144614 的回复:
非常感谢。。我是刚刚学习C++,请问前辈这个delete[] str有什么用?
函数中new[]了一个数组,那么最好是在函数返回前delete[]释放掉。否则就是内存泄漏。 等你学到动态数组的时就会明白。
Samerol_Jomior 2013-09-11
  • 打赏
  • 举报
回复
引用 4 楼 ananluowei 的回复:
[quote=引用 3 楼 u011144614 的回复:] [quote=引用 1 楼 ananluowei 的回复:] 数值太大溢出了。改成unsigned long long吧
是这样吗?
#include<iostream>
using namespace std;
int Fibo(int N)
{
	int i;
	unsigned long long str[50];
	str[0] = 1;
	str[1] = 1;
	for(i = 2; i < N; i++)
	{
		str[i] = str[i - 1] + str [i - 2];
	}
	return str[N - 1];
}

int main()
{
	int N;
	cin>>N;
	cout<<Fibo(N)<<endl;
	return 0;
}
可是还是负的。。[/quote] 函数的返回值还是int 函数中的str应该用动态申请,你这样就定死了不能超过50
#include<iostream>
using namespace std;
unsigned long long Fibo(int N)
{
	int i;
	unsigned long long* str = new unsigned long long[N];
	str[0] = 1;
	str[1] = 1;
	for(i = 2; i < N; i++)
	{
		str[i] = str[i - 1] + str [i - 2];
	}
	unsigned long long ret = str[N - 1];
	delete[] str;
	return ret;
}

int main()
{
	int N;
	cin>>N;
	cout<<Fibo(N)<<endl;
	return 0;
}
[/quote] 非常感谢。。我是刚刚学习C++,请问前辈这个delete[] str有什么用?
大尾巴猫 2013-09-11
  • 打赏
  • 举报
回复
引用 3 楼 u011144614 的回复:
[quote=引用 1 楼 ananluowei 的回复:] 数值太大溢出了。改成unsigned long long吧
是这样吗?
#include<iostream>
using namespace std;
int Fibo(int N)
{
	int i;
	unsigned long long str[50];
	str[0] = 1;
	str[1] = 1;
	for(i = 2; i < N; i++)
	{
		str[i] = str[i - 1] + str [i - 2];
	}
	return str[N - 1];
}

int main()
{
	int N;
	cin>>N;
	cout<<Fibo(N)<<endl;
	return 0;
}
可是还是负的。。[/quote] 函数的返回值还是int 函数中的str应该用动态申请,你这样就定死了不能超过50
#include<iostream>
using namespace std;
unsigned long long Fibo(int N)
{
	int i;
	unsigned long long* str = new unsigned long long[N];
	str[0] = 1;
	str[1] = 1;
	for(i = 2; i < N; i++)
	{
		str[i] = str[i - 1] + str [i - 2];
	}
	unsigned long long ret = str[N - 1];
	delete[] str;
	return ret;
}

int main()
{
	int N;
	cin>>N;
	cout<<Fibo(N)<<endl;
	return 0;
}
Samerol_Jomior 2013-09-11
  • 打赏
  • 举报
回复
引用 1 楼 ananluowei 的回复:
数值太大溢出了。改成unsigned long long吧
是这样吗?
#include<iostream>
using namespace std;
int Fibo(int N)
{
	int i;
	unsigned long long str[50];
	str[0] = 1;
	str[1] = 1;
	for(i = 2; i < N; i++)
	{
		str[i] = str[i - 1] + str [i - 2];
	}
	return str[N - 1];
}

int main()
{
	int N;
	cin>>N;
	cout<<Fibo(N)<<endl;
	return 0;
}
可是还是负的。。
图灵狗 2013-09-11
  • 打赏
  • 举报
回复
++
引用 1 楼 ananluowei 的回复:
数值太大溢出了。改成unsigned long long吧
大尾巴猫 2013-09-11
  • 打赏
  • 举报
回复
数值太大溢出了。改成unsigned long long吧

64,682

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧