算法之递归

自从学了C语言,递归不得解。

自浅学习算法,递归得已解。

很多书上都这么写的,递归:就是间接调用自己或直接调用自己的过程叫递归。

话的确没错,初见还是较难理解,所以一般会给一个斐波那契数列什么的作为经典案例,不得不说我当初看的时候四个字:"头皮发麻"。

后来慢慢接触多了,也不觉得如何。

所谓递归:就是调用自己,不管是间接还是直接(一般都是直接调用)。递归也可以理解为循环,但是比循环占用空间大很多,代码简介是递归的特性,要想理解递归,光看是不行的,要自己动手推,最好是用笔推导过程。

下面我们来看一个案例:

#include <stdio.h>
fun(int n)
{
	if(n==1)
		return 1;
	return fun(n-1)+n;
}
main()
{
	int n=0;
	scanf("%d",&n);
	printf("%d\n",fun(n));
}
这是一个求1+2+3+...+n的递归算法,用循环当然更简单,但这里我们讨论递归。

首先从键盘获取一个正整数n,比如我们输入的是5.

推导过程:

1.进入到fun函数中 ,第一步判断n(此刻n=5) == 1   假,此刻n=5,调用自己 fun(5-1)+5  //这里的n我用它本身的数替换了 

2.进入到fun函数中, 判断n(此刻n=4) == 1 假,此刻n=4,继续调用自己fun(4-1)+4 //把n替换成他本身的整数

3.进入fun函数中,判断n(此刻n=3)==1 还是假,此刻n=3 ,继续调用自己fun(3-1)+3//继续替换

4.进入fun函数中,判断n(此刻n=2)==1 还是假,此刻n=2,继续调用自己fun(2-1)+2//继续替换

5.重点来了,此时在判断n(此刻n=1)==1 为真 ,那么递归开始返回了,return 1返回了一个1

那么这个值就fun最后一次调用的值也就是编号为4fun(2-1)的值为1,fun(2-1)+2 相当于 1+2=3,返回3

那么fun函数的fun(3-1)+3,fun(3-1)的值就是3 ,即fun(3-1)+3的值为6

那么fun函数的fun(4-1)+4,fun(4-1)的值就是6 ,即fun(4-1)+4 =6+4 的值为10,返回10

那么fun函数的fun(5-1)+5,fun(5-1)的值就是10 ,即fun(5-1)+5的值为15

最后return 15 ,即结果=15


这是一个非常简单的过程,递归 ,递:传递(即调用自己),归:回归(return)。

再来回首看看这个题目,我们想知道1+...+5的结果是多少,那么我们首先要知道1+2的结果,知道1+2的结果了,(1+2)+3,知道(1+2)+3的结果了我们还需要知道(1+2+3)+4的结果,到这里子问题被依次求出 最后通过求出子问题结果 依次推出主问题结果即:递归 

这是个较简单的例子,但是如果推出来了,你理解递归会有一个长足的进步,如有不对,谢谢指出。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值