递归
递归是未知条件出发,将一个复杂问题,逐步分解为一个个简单问题。递归是借助栈的数据结构实现的,每次递归时需要自己调用自己,重复从内存中读取数据以及执行相同操作,所以在执行递归时会存在大量的内存和时间代价。
由于设计递归思想需要处理问题具有特定的执行顺序和退出条件,所有不是所有的问题都适合使用递归思想;
递推
递推则是从已知条件出发,根据数据间的数量关系得出的规律来设计算法。相较于递归,递归无需重复的读取数据,所以就性能方面,推荐将算法设计为递推。
代码范例( 以 Leetcode 70题“爬楼梯”为例 )
//递归:代码简单,但需要设计退出条件,此题不适用
if(n==1)
{
return 1;
}
if(n==2)
{
return 2;
}
return climbStairs(n-1)+climbStairs(n-2);
//递推:此题易得爬1阶与爬2阶的数量关系,适用于此题求解
int[] way=new int[n+1];
way[0]=1;
way[1]=1;
for(int i=2;i<=n;i++)
{
way[i]=way[i-1]+way[i-2];
}
return way[n];
}
本文探讨了递归和递推在算法设计中的应用,对比了它们的优缺点,通过LeetCode爬楼梯问题实例解析,展示了如何选择递归还是递推,并提供了代码范例。

949

被折叠的 条评论
为什么被折叠?



