阶梯算法问题


50个阶梯,你一次可以上一阶或两阶,走上去,共有多少种走法?

c 算法

寿司123 12 years, 5 months ago
   
  #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, 5 months ago

Your Answer