杭电2041

#include 
int upstairs(int n)
{
	int floors;
	if (n==1)//去一楼不走台阶
	{
		floors=0;
	}
	if (n==2)//去二楼走1个台阶
	{
		floors=1;
	}
    else if (n==3)
	{
		floors=2;
	}//去三楼走两个台阶
	else
	{
		floors=upstairs(n-1)+upstairs(n-2);
	}
	return floors;

}

int main()
{
	int n,m,floors;
	scanf("%d",&n);
	while(n--)
	{
		scanf("%d",&m);
		floors=upstairs(m);
		printf("%d\n",floors);
	}
}

用递归写竟然超时了!

用递推试一下!

#include 
int dt(int n)
{
	int a[41]={0,1,2};
	for (int i=3;i<=n;i++)
	{
		a[i]=a[i-1]+a[i-2];
	}
	return a[n];
}
int main()
{
    int n,m;
	scanf("%d",&n);
	while(n--)
	{
		scanf("%d",&m);
		printf("%d\n",dt(m-1));
	}
}

从这里可以发现能用其他的就不要用递归,超时很严重!



你可能感兴趣的:(杭电2041)