关于递归算法(c++)

我也是最近才搞懂它。有点难理解,我不太常用,觉得有点麻烦(并不是说递归不好,只是看情况)。但是既然考试要考,还是学一下吧。

递归一般由函数来实现,偶尔也用主函数。它其实不像他们说的“递去归来”那么复杂,简单来说就是自己调用自己。从上往下,就像一个公式,每次传不同的数进去,还有未知数就再传,直到一为止。

没接触过的人可能会看不懂上面这段,我再给个解释。

比如说像从一加到十,会的人一个循环就可以解决。但用递归的话就要复杂一些:

用这个                     结果=结果+传过来的值。

                                 把传过来的值-1传到这个函数里来。

就是依次累加的意思。一开始,‘结果’要制零(因为你根本不知道它会给你初始成一个什么数),传过来的是10(按咱们假设的题来算),就会得到‘结果’是十。而又把十减一传回去,就会运行十加九,以此类推。

知道了之后,再来看一个复杂一点的递归例子。

听说过斐波那契数列吧?!这道题是要输出第n个斐波那契数。为了方便,直接上代码。

int fibo(int n)
{
    if(n<=2) return 1;
    return fibo(n - 2) + fibo(n - 1);
}

斐波那契数列长这个样子:1 1 2 3 5 8 13 21......

你大概看出来了,就是第三个数是前两个数之和。这道题用递归就很简便。这是个函数,名字叫‘fibo'。(不会函数的赶紧去问老师!!!)

来看看函数里面的内容。如果n小于等于二,就返回1,因为前两个数就是一。

第二句有点费脑筋。就是我刚说的,自己调用自己。相比于上面那到累加题,这是一个更为复杂的语句。我们暂且把n设为4。

加号的右边

在这里调用了自己。

先传回了4,有了两个结果:n-2和n-1(2,3.)

(为了方便,我们只看加号右边)

在右边,3又被分为两个,一个n-2,一个n-1。(1,2.)

这下好了,两个数都在二的范围内,值都是一。

最后,倒着推一下。

左边是一,右边也是一,加一块是2。但是我们知道,第四个数是3。

为什么呢?

哈哈,脑子断片了吧!!

我们加号的左边没算。结果应该是1。加一起是3,没错。

加号左边同样如此,但要简单一些。为了省劲,脑补一下就好了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值