Answers
#include "stdafx.h"
#include "iostream.h"
int Katrina(int n)
{
if(n==0)
return 0;
else
if(n==1)
return 1;
else if(n==2)
return 2;
else if(n>2)
return Katrina(n-1)+Katrina(n-2);
}
void main()
{
int m,result=0;
cout<<"cout the m "<<endl;
cin>>m;
result=Katrina(m);
cout<<result<<endl;
}
网上的这个算法,输入40多层都没问题,50层就算不出来。
经过验证:果然是两个问题造成的。1.递归层次太多,栈溢出。2. 32整数表示不了结果。换成非递归的,64位整数,速度快很多了,而且正常显示了。
居然不知道64位整型怎么写,以及printf %I64d怎么写,找李老师帮忙了。我基础还是不扎实啊。
#include "stdafx.h"
#include "iostream.h"
void main()
{
__int64 a1=1,a2=2,a3=0;
for (int i=3;i<50;i++)
{
a3=a1+a2;
a1=a2;
a2=a3;
}
printf("result:%I64d",a3);
}
结果:12586269025。
DRACULA
answered 12 years, 4 months ago