首页 > 其他 > 详细

递归入门1

时间:2019-11-23 22:27:08      阅读:87      评论:0      收藏:0      [点我收藏+]

递归是编程学习的一大门槛,于是我将写一系列的文章来记录和总结它;

C++函数能够自身调用自身,于是乎就可以用递归

首先是 包含一个递归调用的递归,

void recurs (argumentlist)
{ 
      statements1
      if (test)          //test的值为0时,调用链将断开,递归调用停止
          recurs(arguments)
      statements2
}

分析一下这段语句将如何运行,

 每当 recurs() 函数被调用时,statements1将会被执行,

 然后如果test的值是true,那么当前的recurs()会去调用一个新的recurs(),而先不去执行statements2,被调用的recurs()也会按照这样的规则去运行,

 直到某一个recus()中的test的值为false,那么这个recurs()就不会再去调用recurs(),而去执行statements2,然后当statements2执行完,当前的recurs()的调用结束,

控制权被返回到调用这个recurs() 的 recurs(),再然后这个recurs()也是去执行statements2(因为这时 if 语句已执行完,按照顺序statements2将会被执行)结束后,控制权再被返回,

依次类推,直到最初的recurs()运行完,整个递归调用就结束了。

 

下面给出一个样例程序:

#include <iostream>
#include <cstdio>
using namespace std;
void countdown(int n)
{
    printf("This number is %d\n",n);
    if(n>0) countdown(n-1);
    printf("%d Kaboom\n",n);
}
using namespace std;
int main()
{
    countdown(4);
    return 0;
}

你可以先自己模拟,然后再在本地上运行一下,看看结果是否如你所想;

注意,每一个递归调用都会创建一套自己的变量,于是当以上程序带到第五次调用时,就有了五个独立的n变量,它们拥有不同的值和地址,

你可以修改上面的程序让他在输出n的值时,同时输出n的地址,以验证。

当然,如果在一个递归中,有一系列变量(比如a,在递归的过程中他的值并没有像n一样发生改变,但在每一个递归调用中他的地址还是不一样的)。

 

好了,这篇文章就先讲到这里,下一篇将会讲包含多个递归调用的递归。

如果你觉得这篇文章好的话,希望能得到你的一个赞,如果有问题或意见也可在下方评论区点出,

谢谢,QwQ!

 

递归入门1

原文:https://www.cnblogs.com/majorin/p/11920373.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!