iOS:Block写递归

时间:2023-03-09 12:54:39
iOS:Block写递归

首先来一个 oc 的递归:

- (int)sum:(int)num {

    ) {

        return num;

    }

    ];

}

写递归算法只需要记住两点即可:

1. 有一个明确的出口

2. 不满足条件出口时,自己调用自己

按照以上思路用 block 改写一下:

static int (^sumBlock)(int) = ^ (int num) {

    ) {

        return num;

    }

    );

}; 

注意,要做到自己调用自己,需要能够准确的在内存中找到 `block` 的函数入口,因此需要使用 `static` 修饰符号,其他就没啥了

另外,面试中如果被问到,一定要说下:

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

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

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

上面的测试代码调用 NSLog(@"%d", sumBlock(1024 * 128)); 就会出现栈溢出错误