递归的简单实例

递归:在定义一个函数时出现调用本函数的事件就是递归。函数内部调用称为直接递归,若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。
很明显递归增加了系统负荷,相比迭代占用了较多的内存。但有时候能使程序更简洁,一般在树、表、图的查询中使用较多。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值