OJ 귀속 2.2 피폴라치 수열

15005 단어 递归递推
헤헤헤헤, 여러 번 틀렸는데 드디어 틀린 원인을 찾았다
아래를 보십시오.
어디 있는지 알아맞혀 봐.
#include
int n,m,a[25]={0,1,1};
int wht(int n){
	if(a[n]!=0) return a[n];
	else a[n]=wht(n-2)+wht(n-1);
	return a[n];
}
int main()
{
	scanf("%d",&n);
	for(int i=1;i<=n;i++){
		scanf("%d",&m);
		printf("%d",wht(m));
	}
}
비교해 보니 무엇이 발견되었다.
#include
int n,m,a[25]={0,1,1};
int wht(int n){
	if(a[n]!=0) return a[n];
	else a[n]=wht(n-2)+wht(n-1);
	return a[n];
}
int main()
{
	scanf("%d",&n);
	for(int i=1;i<=n;i++){
		scanf("%d",&m);
		printf("%d
",wht(m)); } }

바로
적어!됐어!하나!개!비었어!격!!!!!!!!!!
우우우우우.
B~~~~~~U~~~~~~~~T
결국 발견했어.
공교롭게도 이 2.2리의 문제는 모두 이곳에서 틀렸다.그래서 작은 디테일도 모든 것을 결정할 수 있다.기억해.
잠깐만!!!!!!!!!!!
방법을 잊어버린 것 같아!
오, 이것은 내가 처음으로 귀속으로 문제를 풀었기 때문에 이 비교적 기초적인 것을 골랐다.
우선 그들 사이의 관계를 찾아야 한다. Fn=F(n-1)+F(n-2);F1=1;F2=2
그리고 계속 밀어: F(n-1) = F(n-2) + F(n-3);
그래서 만들었어요.
모르면 코드를 잘 봐.
또 하나의 방법은 비교적 점차적으로 미루는 것이다.
#include
using namespace std;
int a,n;
int b[1000000];
int main()
{
	int k=0;
	cin>>n;
	while(n-k!=0){
		cin>>a;
		b[1]=1;
		b[2]=1;
		for(int i=3;i<=a;i++){
			b[i]=b[i-1]+b[i-2];
		}
		cout<<b[a]<<endl;
		k++;
	}
}
이것도 마찬가지입니다.
코드를 보면 알 거예요.

좋은 웹페이지 즐겨찾기