递归的简单实例

来源:互联网 发布:剑三脸型数据库 编辑:程序博客网 时间:2024/06/06 20:21
递归:在定义一个函数时出现调用本函数的事件就是递归。函数内部调用称为直接递归,若A调用B,而B中调用A,称为间接递归。
例:
public int addNumber(int s,int i)
{
if (s < 0 || i < 0 || i - s < 1) return -1;
int y;
if (i-s== 1)
{
y = s+i;
return y;
}
else
{
y = i + addNumber(s, --i);
return y;



}


如果调用函数addNumber(1,100),则返回5050,此递归函数是返回介于两个正整数之间的所有整数的和,程序执行的时候,一步一步减小i的值,第一步得到中间结果100+addNumber(1,99)并保存(既有实际意义的值也有变量),继续求99+addNumber(1,98)……并把所有中间结果保存在内存中(堆栈),直到满足条件2-1==1的时候停止前行,并由返回值3(实际意义的值)开始回溯赋给先前保存的临时变量,也就是3+3+4+5……直到100。
所有的递归都可以通过迭代的方法转化成非递归形式。所谓迭就是重复,代就是替换,对应C#里面的For循环。
递归与迭代的对比:
递归算法的时间复杂度一般为2n,因为它要回溯。
迭代的算法时间复杂度为n。
很明显递归增加了系统负荷,相比迭代占用了较多的内存。但有时候能使程序更简洁,一般在树、表、图的查询中使用较多。
原创粉丝点击