IOS - 递归

递归

递归的理解就是自己调用自己,C#中也是这么理解的,将满足的条件返回,不满足的时候自己调用自己

object-c:

- (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在自己调用自己的时候,要能准确的在内存中找到‘block‘函数的入口,因此需要使用‘static‘修饰符号.

1. 每次调用一次自己,系统都会开辟一个栈桢记录临时变量和参数

2.递归次数过多,会出现溢出错误

3.移动开发中不建议使用递归算法,现在主线程栈去只有512k

时间: 2024-10-14 12:14:26

IOS - 递归的相关文章

iOS 递归锁

递归锁 原理:递归锁也是通过 pthread_mutex_lock 函数来实现,在函数内部会判断锁的类型.NSRecursiveLock 与 NSLock 的区别在于内部封装的 pthread_mutex_t 对象的类型不同,前者的类型为 PTHREAD_MUTEX_RECURSIVE 运用场景:循环(多张图片循环上传),递归 //递归锁实例化 NSRecursiveLock *lock = [[NSRecursiveLock alloc] init]; static void (^Recurs

PromiseKit 解析 (二) 递归 IOS

在PromiseKit中,里面涉及了很多的递归操作,而递归操作,对于大部分人理解起来都是比较麻烦的(包括我),而github中一些高上大的第三方库,无一不涉及了很漂亮的递归操作,因此理解递归操作是很必要的.如果想成为尽可能优秀的程序猿. 递归操作:自己调用自己,不停的压栈,最后出栈.(说的简单,但是还是理解起来还是比较复杂的) 我们来接着看看PromiseKit的递归操作,看看它的链式结构式怎么样实现的. 相信在上一章就可以了解到,then操作最后返回的是一个新的PMKPromise,然后返回的

蓝懿iOS培训日志11 递归

今天讲的文件管理器 递归 递归就是方法调用自身 简单几行代码功能却非常强悍. //判断是否是文件夹 BOOL isDir = NO; NSFileManager *fm = [NSFileManager defaultManager]; if ([fm fileExistsAtPath:filePath isDirectory:&isDir]&&isDir) { cell.accessoryType = UITableViewCellAccessoryDisclosureIndic

iOS函数,函数递归

#import <Foundation/Foundation.h> #import "Function.h" int main(int argc, const char * argv[]) { //函数定义 /*返回值类型 函数名(参数1, 参数2, 参数3, 参数4) { 函数体; return 返回值; } */ //函数四种基本类型: //无参无返回值 //实参 到形参的过程是一个拷贝的过程 //函数的值,要哟过对应的数据类型进行接收 //c语言允许函数嵌套调用,不允

【学习ios之路:C语言】函数及递归的简单应用

函数定义: 返回值类型 函数名(形参列表){函数体(函数的实现内容)}; 函数定义的四种形式: //函数定义第一种形式: 无参数, 无返回值 void byMilk() { //如果没有参数,小括号必不可少. printf("没钱\n"); } //函数名的命名规范:由多个英文单词组成,除了第一个单词的首字母小写,其余单词首字母大写. //函数定义第二种形式,有返回值,无参数 float salary() { printf("同志们辛苦了\n"); return 0

IOS 阶段学习第七天笔记(函数、递归)

一.函数 1)概念:具有特定功能的代码块的封装 2)函数的定义: 函数类型+函数名(形参列表) 函数类型 函数名(形参类型1  形参名1,形参类型2   形参名2.....){ 函数体://函数的实现 } 3)函数名要符合标示符的定义 4)函数的返回类型可为空,为空用void;也可以是其他数据类型. 5)void函数的调用:函数名(); void类型不能用任何类型去接收. 6)int 类型函数的调用:定义int类型的数据去接收函数的返回值,例如: int sum=add(x,y); 有时候也可以

iOS:Block写递归

首先来一个 oc 的递归: - (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 n

ios视图递归显示

po [self.view recursiveDescription]; 显示如下 <__NSArrayM 0x7b920e50>( <UITableViewWrapperView: 0x7b933960; frame = (0 0; 320 568); gestureRecognizers = <NSArray: 0x7b933f20>; layer = <CALayer: 0x7b933c60>; contentOffset: {0, 0}; contentS

iOS界面布局的核心以及TangramKit介绍

前言 TangramKit是iOS系统下用Swift编写的第三方界面布局框架.他集成了iOS的AutoLayout和SizeClass以及Android的五大容器布局体系以及HTML/CSS中的float和flex-box的布局功能和思想,目的是为iOS开发人员提供一套功能强大.多屏幕灵活适配.简单易用的UI布局解决方案.Tangram的中文即七巧板的意思,取名的寓意表明这个布局库可以非常灵巧和简单的解决各种复杂界面布局问题.他的同胞框架:MyLayout是一套用objective-C实现的界面