iOS:Block写递归
2015-07-15 16:19
197 查看
首先来一个 oc 的递归:
写递归算法只需要记住两点即可:
1. 有一个明确的出口
2. 不满足条件出口时,自己调用自己
按照以上思路用 block 改写一下:
注意,要做到自己调用自己,需要能够准确的在内存中找到 `block` 的函数入口,因此需要使用 `static` 修饰符号,其他就没啥了
另外,面试中如果被问到,一定要说下:
1. 每调用一次自己,系统都会开辟一个栈桢记录临时变量和参数
2. 递归次数过多,会出现栈溢出错误
3. 移动开发中不建议使用递归算法,现在主线程栈区只有 512K
上面的测试代码调用 NSLog(@"%d", sumBlock(1024 * 128)); 就会出现栈溢出错误
- (int)sum:(int)num { if (num == 0) { return num; } return num + [self sum:num - 1]; }
写递归算法只需要记住两点即可:
1. 有一个明确的出口
2. 不满足条件出口时,自己调用自己
按照以上思路用 block 改写一下:
static int (^sumBlock)(int) = ^ (int num) { if (num == 0) { return num; } return num + sumBlock(num - 1); };
注意,要做到自己调用自己,需要能够准确的在内存中找到 `block` 的函数入口,因此需要使用 `static` 修饰符号,其他就没啥了
另外,面试中如果被问到,一定要说下:
1. 每调用一次自己,系统都会开辟一个栈桢记录临时变量和参数
2. 递归次数过多,会出现栈溢出错误
3. 移动开发中不建议使用递归算法,现在主线程栈区只有 512K
上面的测试代码调用 NSLog(@"%d", sumBlock(1024 * 128)); 就会出现栈溢出错误
相关文章推荐
- iOS 语录
- iOS开发-Day2-C的复习
- iOS 字符串截取,将字符串中用括号包括的内容去除
- IOS推送功能的实现
- iOS应用内购基本步骤及问题
- iOS统计有多少行代码
- 一些比较好的iOS开发博客持续更新中
- iOS 获取导航栏和状态栏的高度
- 为iOS应用/游戏内建购买项目(IAP)
- 【iOS】TableView的footerView不随cell滚动而停留在tableView底部的问题
- iOS-某公司笔试题
- IOS 每日一练 第一天
- iOS 开发实践之 Auto Layout
- iOS设计模式--桥接
- iOS开发之上传图片
- iOS - 正则表达式判断邮箱、身份证..是否正确
- IOS多视图应用管理器
- iOS初学知识总结
- iOS 使用grouped时,cell与navationbar的边距设置
- IOS8禁用第三方键盘