递归函数的深入理解,很多人的理解误区

很久没时间发笔记了,这次抽空 sky(我的昵称) 再为大家讲解一个东东,讲的不好之处大神勿喷哈

#include<iostream>
using namespace std;
void bin(const unsigned int &i)
{
    
    if (i/2)
        bin(i/2);
    cout << i%2;
}

int main()
{
    int a;
    cin >> a;
    bin(a);
    cout << endl;
    return 0;
}
这是一个求一个数的二进制的程序,
对于这样的递归函数大家肯定不陌生,但是相信很多人还是不清楚它的执行过程吧,或者误以为自己想的是对的,下面我将为大家解答:
      递归函数是如何结束的呢?就是递归函数结束的标志,在本程序中,递归函数结束的标志就是if(i/2)为假,
则递归函数结束。
      程序执行是这样的,如果传进来的数是6,那么第一次if()判断为真,则执行bin(i/2),执行完后还会执行cout << i%2;不过这一句只是將它入栈了,不会在屏幕上面输出,这样才是递归函数第一次进行递归,第二次进入的时候会把第二次的cout << i%2;入栈,以此类推,直到当判断到if()为假的时候,这时递归才会结束,此时开始出栈,栈是先进后出,所以才是先输出最后执行的cout << i%2;
       很多人都认为第一次执行bin()的话就不会执行cout << i%2;了,这样的理解是错误的,因为递归就是在反复地调用函数本身,调用函数就是一个入栈的过程,如果实在不理解的话大家可以把程序反汇编一下看下编译器执行的过程就知道了。

时间: 2024-10-04 22:12:33

递归函数的深入理解,很多人的理解误区的相关文章

上传伪技术~很多人都以为判断了后缀,判断了ContentType,判断了头文件就真的安全了。是吗?

今天群里有人聊图片上传,简单说下自己的经验 0.如果你的方法里面是有指定路径的,记得一定要过滤../,比如你把 aa文件夹设置了权限,一些类似于exe,asp,php之类的文件不能执行,那么如果我在传路径的时候,前面加了一个../呢,这样这种服务器端的限制就跳过了.(DJ音乐站基本上都有这个问题,以及用某编辑器的同志) 1.常用方法:这种就是根据后缀判断是否是图片文件,需要注意的是这种格式:文件:1.asp;.jpg  1.asp%01.jpg  目录: 1.jpg/1.asp 1.jpg/1.

很多人都在埋怨没有遇到好的团队,但好的团队不可能凭空出现,一流的团队不能仅靠团队成员努力,作为Leader,要有可行的规划,并坚定地执行、时势地调整(转)

<西游记>中的唐僧团队历经千难万险,终于求得真经,目标明确.分工合理为这支队伍最终走向成功奠定了基础.唐僧从一开始,就为这个团队设定了西天取经的目标,虽然经历各种挫折与磨难,但目标从未动摇.悟空探路.八戒牵马.沙僧挑担,几位徒弟一起肩负着保护唐僧的任务.虽然性格迥异.各有缺点,但目标分解合理及成员分工合作,最终风雨同舟,取得真经. <西游记>的故事引申到实际团队技术管理中,也一样有借鉴意义,本文作者为CTO俱乐部会员.湖北同城一家网络科技有限公司开发总监杨斌,他结合自己多年经历谈谈

很多人,被这句话害了一辈子

点击上方蓝字关注我们,夜读与你一起砥砺前行! 21君:小时候,你可听过“这孩子特聪明,就是学习不用心,他要是认真起来,学习成绩肯定好.”这句话么?是对你说的,还是对你身边的人说的?很多人都觉得这是一个夸奖,但其实给孩子这样的一个想法,其实是害了孩子.自作聪明的人,往往还没有学会正视自己与他人的努力和付出,就已经喜欢了那种轻盈获胜的姿态.为了姿态好看,他们宁可输,也不想通过努力制胜.来源:衷曲无闻(zhongquwuwen) 8:48 很多人,被这句话害了一辈子 来自21世纪经济报道   特别鸣谢

为什么很多人工作都不开心?【转】

间接来源:http://blog.csdn.net/tiewen/article/details/8618357 疑似原文:http://www.douban.com/note/263041979/ 那些经常不开心的上班族 有很多人都和我抱怨过他们的工作,不光是网络上的读者,还有身边的朋友.他们不解,为什么我做工作,大部分时候都是开开心心,嘻嘻哈哈的,而他们在下班后,大都愁云不解,有时甚至会在饭桌上念叨半天自己受的委屈. 我捧着头,听他们说完自己的苦楚后,问他们:那既然不开心,为什么不辞职呢?

为什么很多人会特别执着于对错?

作者:刘未鹏 原文地址:https://weibo.com/1882579600/G0a85vAhg?filter=hot&type=comment 大佬博客:http://mindhacks.cn/ 为什么很多人会特别执着于对错?我觉得有两个深刻的原因: 在很多家庭中是没有足够明确的个人边界的,但人又天然需要维护自己的权利,当不能说「你管不着」的时候,就只能用「我是对的,你是错的」来挡住对方的入侵. 人性永远会寻找出口,当一种文化不允许人去谈权利,那人必然会发明出新的对策来,这种对策就是讲对错

程序员工资高,却有很多人想转行,理由很简单!

这些年各大互联网公司曝光的一些员工收入水平来看,程序员的工资还是相对比较高的,可是我们在互联网上还听到了另外一种声音,很多程序员想转行,特别是大龄程序员,这可能会令很多人纳闷.为什么工资这么高还想转行呢?其实也很无奈,从下面几点可以看得出来. #1.程序员加班多,经常熬夜 IT行业是一个工作节奏非常快的行业,项目越快上市,就能更快一步抢占商机,为了加快项目的进度,项目的计划时间安排也是相当紧张,所以程序员加班是经常的事,导致加班多还有一些其他的原因,我们设计好项目的需求以后,为了适应用户或者客户

为什么很多人吐槽谭浩强的C语言程序设计?

这个观点在网络上已经论战了很长时间,出现这种情况还是历史遗留问题,老谭出的C语言教材几乎是国内的第一版,由于中英翻译问题或者对编程文化理解的差异性导致出来的书多多少少存在一些纰漏.不能只是记住其缺点,老谭书最主要在那个年代起到了普及C语言的作用,这已经足够了,如同做一个产品,首先解决的是有没有问题,最后才是细节完善阶段.最后,如果大家如果在自学遇到困难,想找一个C++的学习环境,可以加入我们的C++学习圈,点击我加入吧,会节约很多时间,减少很多在学习中遇到的难题. 为什么很多人吐槽谭浩强的C语言

一道简单的 Java 笔试题,但值得很多人反思

面试别人,对我来说是一件新奇事,以前都是别人面试我.我清楚地知道,我在的地域与公司,难以吸引到中国的一流软件人才.所以,我特地调低了期望,很少问什么深入的技术问题,只问一些广泛的.基础的.我只要最终给Leader一句“这个人技术还行/很好/非常好”,就行了.至于其它能力.综合水平,由别人把关.为此,在挑选唯一的一道笔试题时,我特别地上心. 首先,我不敢用网上那些广为流传的,比如Leetcode.<程序员面试宝典>里的题——这些都太难了!正儿八经做,其实很少有人能在1小时内完美做出来,除非之前遇

[转帖](区块链补习班)ERC20很多人都听过,但ERC是什么你真的了解吗?

(区块链补习班)ERC20很多人都听过,但ERC是什么你真的了解吗? http://baijiahao.baidu.com/s?id=1600948969290990883&wfr=spider&for=pc 区块链福利社 发布时间:18-05-2012:15 ▌今日币价 Btc$8505/ Eth$707/Eos$12.94 本文不介绍技术代码相关,具体代码可在文末自行下载学习,为了方便阅读下文,特此做几个定义的解释: 可替代性通证(fungible token):在本文指的是基于区块链