Pell数列

一直想用递归去搞,总是GG。。。

#include<iostream>
#include<vector>
#include<string>
using namespace std;

long GetPells(long n)
{
	if(n==1)
	{
		return 1;
	}
	else if(n==2)
	{
		return 2;
	}
	else
	{
		return 2*GetPells(n-1)+GetPells(n-2);
	}
}

int main()
{
	int linenum=0;
	vector<long> vec1;
	cin>>linenum;
	while((linenum--)>0)
	{
		long temp=0;
		cin>>temp;
		vec1.push_back(temp);
	}

	for(int i=0;i<vec1.size();i++)
	{
		cout<<GetPells(vec1[i])%32767<<endl;
	}
	
	return 0;
}

用循环大法吧。。。

#include<iostream>
#include<vector>
#include<string>
using namespace std;
#define K 32767

int main()
{
	int linenum=0;
	vector<long> vec1;
	vector<long> vec2;
	cin>>linenum;
	while((linenum--)>0)
	{
		long temp=0;
		cin>>temp;
		vec1.push_back(temp);
	}

	//干,原来本质上是先存到一个数组中去
	vec2.push_back(1);
	vec2.push_back(2);
	for(int j=2;j<1000001;j++)
	{
		vec2.push_back((2*(vec2[j-1]%K)+vec2[j-2]%K)%K);
	}

	for(int i=0;i<vec1.size();i++)
	{
		cout<<vec2[vec1[i]-1]<<endl;
	}
	
	return 0;
}

 

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页