浅谈递归的理解

递归

C允许函数调用它自己,这种调用过程就叫做递归。可以使用循环的地方通常可以使用递归。有时用循环解决问题比较好,有时用递归更好。递归方案更加简洁,但效率却没有循环高。

演示递归

#include <stdio.h>
void up_and_down(int n);
int main()
{
	up_and_down(1);
	return 0;
}
void up_and_down(int n)
{
	printf("Level %d: n location %p\n",n,&n);		//#1
	if(n < 4)
		up_and_down(n + 1);
	printf("LEVEL %d: n location %p\n",n,&n);		//#2
}

输出结果:

Level 1: n location 0x0012ff48
Level 2: n location 0x0012ff3c
Level 3: n location 0x0012ff30
Level 4: n location 0x0012ff24
LEVEL 4: n location 0x0012ff24
LEVEL 3: n location 0x0012ff30
LEVEL 2: n location 0x0012ff3c
LEVEL 1: n location 0x0012ff48

从结果中我们可以看到:在if(n < 4)语句成立的条件下,由#1语句输出了1、2、3、4语句,之后n=5不再满足条件,递归(递)的过程结束,接下来该递归(归)回去。倒序由#2语句输出4、3、2、1语句,且相同级的地址是相同的,相当于“归”的时候是按照“递”过程的路径原路返回。

递归的原理

递归原理图
递归调用非常类似于一个循环语句。实际上,递归有时可用循环来代替,循环有时也可以用递归来代替。递归函数必须包含能让递归调用停止的语句。通常,递归调用都使用if或其他等价的测试条件在函数形参等于某一特定值时终止递归。

尾递归

最简单的递归形式是把递归调用置于函数的末尾,即正好在return语句之前,这种形式的递归被称为尾递归。例如求阶乘、斐波那契数列等。

递归三要素

1、明确递归终止条件;
2、给出递归终止时的处理办法;
3、提取重复的逻辑,缩小问题规模。

递归的优缺点

优点是递归为某些编程提供了最简单的解决方案。缺点是一些递归算法会快速消耗计算机的内存资源。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值