聊聊“尾递归优化“简介拷贝构造&拷贝赋值
来源:互联网 发布:淘宝的正品保证有用吗 编辑:程序博客网 时间:2024/06/05 03:27
尾递归优化
尾递归.顾名思义,将本函数的工作结果作为参数,调用本函数,然后将其结果返回.
尾递归可以被优化.原因在于:在尾递归中我们不需要保存上一次本函数调用的结果.因为我们已经在尾部了:)
怎么优化呢?
用for循环即可:
//尾递归Recursion(int a){ if(退出条件) { return X } 具体操作;Recursion(a);}//用for优化后:for(;**!退出条件**;){ 具体操作;}
轻松解决爆栈有木有?
聊一件与尾递归相关的事情,
当年写win32调试器的时候,码过一段自认为爽的代码,它顺畅地打印出了当前程序的栈回溯:
//栈回溯递归搜寻void kRecur(DWORD* dwEbp){ if(nullptr==dwEbp) {return;} DWORD dwNewEbp=0; if( false==ReadDebuggedMemory((PVOID)dwEbp,4,_Out_ (BYTE*)(&dwNewEbp))) { return ; } DWORD dwFunReturnPath=0; if (false==ReadDebuggedMemory((PVOID)(dwEbp+1),4,_Out_ (BYTE*)(&dwFunReturnPath))) { return; } if (0!=(DWORD)dwNewEbp) { kRecur((DWORD*)dwNewEbp); } return ;}
后来学优化的时候才发现它是一个尾递归。囧。
拷贝构造&拷贝赋值
当对一个对象有复制操作,如作为参数传入一个函数,以及:
class V{......}V* CA=new V();V *CB=*CA();//发生拷贝构造
拷贝构造就是C++设计者给我们的一个机会,让我们在上面所说的事件发生时能做一些操作.
想把握控制这个机会的话,你需要声明如下:
/*拷贝构造函数 */ CExample(const CExample& C) { //...... }
赋值构造同样可以复制对象
/*赋值构造 */const CExmple& operator=(const CExmple& operator C) { //...... }
以上内容还被用在单例模式中。
语法灵活归灵活,但是不慎误用又没有错误提醒就惨了。
关于explict防止隐式类型转换得内容可参考:
C++关键字explict的详解和使用
关于主题更详细的内容可参看:
拷贝构造详解-ChinaUnix
推荐看这个:
拷贝构造函数详解
晚安
2016年5月13日 00:26:19
修订
2016年5月23日 21:29:37
1 0
- 聊聊“尾递归优化“简介拷贝构造&拷贝赋值
- 构造、拷贝构造、赋值
- 拷贝构造 赋值构造
- 拷贝构造和拷贝赋值
- 拷贝构造与拷贝赋值
- 构造&转换&拷贝&赋值
- 拷贝,赋值构造函数赋值
- 拷贝构造和赋值构造
- 拷贝构造和赋值重载,移动拷贝,赋值拷贝
- c++构造,拷贝构造,拷贝赋值,移动构造,移动赋值
- 拷贝构造-赋值构造-深拷贝-浅拷贝
- 拷贝构造函数 与 拷贝赋值函数
- 拷贝构造函数和拷贝赋值函数
- Cpp_拷贝构造与拷贝赋值
- C++之拷贝构造与拷贝赋值
- day_06_拷贝构造、拷贝赋值、静态成员
- 赋值函数、拷贝构造函数
- 拷贝构造函数赋值函数
- 合法括号序列判断
- java多线程-线程的实现
- python学习笔记-语法
- leetcode138: Copy List with Random Pointer
- Java中的继承
- 聊聊“尾递归优化“简介拷贝构造&拷贝赋值
- 分享一个牛逼的chrome插件--Postman
- Android学习之监听软键盘的弹起关闭
- android关于调用联系人信息的问题
- html 缓存公共数据数据 银行卡校验 身份证校验
- HDU4848WoW
- maven常见开发配置spring,hibernate,structs,jdbc,log4j,mybatis
- Android 基于google Zxing实现二维码、条形码扫描,仿微信二维码扫描效果
- Servlet——过滤器