ACM--递归效率的比较

本文通过两个测试用例对比了递归方法与非递归方法在ACM问题中的效率。递归在处理大规模数据时可能导致程序崩溃,而优化后的非递归方案在1000ms内得到结果,强调在编程中应谨慎使用递归以提高效率。
摘要由CSDN通过智能技术生成

测试用例:

2

1 2

3 50

改进前的代码(用递归的方法):

#include<iostream>
using namespace std;
int main()
{
	long long getStep(int, int);
	int n,a,b;
	cin>>n;
	while(n--)
	{
		cin>>a>>b;
		cout<<getStep(a,b)<<endl;
	}
	return 0;
}

long long getStep(int a, int b)
{
	b = b - (a-1); //实际上相当于只有1个参数b,a到b换算成从1到t(t这里就是更新后的b,a就为1),步骤都一样 
	if(b == 2)
	{
		return 1;
	} 
	if(b == 3)
	{
		return 2; 
	}
	
	return getStep(1, b-1) + getStep(1, b-2);
}

改进后的代码(去除递归):

#include<iostream>
using namespace std;
int main()
{
	long long getStep(int, int);
	int n,a,b;
	cin>>n;
	while(n--)
	{
		cin>>a>>b;
		cout<<getStep(a,b)<<endl;
	}
	return 0;
}

long long getStep(int a, int b)
{
	b = b - (a-1); //实际上相当于只有1个参数b,a到b换算成从1到t(t这里就是更新后的b,a就为1),步骤都一样 
	if(b == 2)
	{
		return 1;
	} 
	if(b == 3)
	{
		return 2; 
	}
	long long f1 = 1;
	long long f2 = 2;
	long long step;
	for(int i=3; i<b; i++)
	{
		step = f1 + f2;
		f1 = f2;
		f2 = step;
	}
	return step; 
}

结果说明:

     递归算法第二个测试用例,直接导致程序崩溃,而改进后的方法1000ms之内就出结果,故而尽量避免应用递归。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值