递归使用背景,(彩票类app,需要遍历出所有的组合方式,比如竞彩足球,我选择两场比赛,每场比赛选择3种结果,过关方式为2串1)
如图所选
而这种选择方式总共有9注,分别用3、1、0来代表胜、平、负,则出现的结果为:33、31、30、13、11、10、03、01、00,将所选中的比赛加到数组里面,接下来,我要遍历出每种组合方式,需要得到如图所示的方案
上图为我所需要的数据
代码如下
NSMutableArray *dataArray = [NSMutableArray arrayWithArray:[self.recordEveryGamesSelectedDetail allValues]];//此处数组是我从上个页面传过来的选择数据,
self.needArray = [NSMutableArray array];//最终得到的组合数组(排列结果为33、31、30、13、11、10、03、01、00)
NSMutableArray *result = [NSMutableArray array];
[self combine:result data:dataArray curr:0 count:(int)dataArray.count];//调用递归函数,处理数据
#pragma mark -- 使用递归排列组合出所有可能出现的方式
- (void)combine:(NSMutableArray *)result data:(NSArray *)data curr:(int)currIndex count:(int)count
{
if (currIndex == count) {
[self.needArray addObject:[result mutableCopy]];
[result removeLastObject];
} else {
NSArray *array = [data objectAtIndex:currIndex];
for (int i = 0; i < array.count; ++i) {
[result addObject:[array objectAtIndex:i]];
//进入递归循环
[self combine:result data:data curr:currIndex+1 count:count];
if ((i + 1 == array.count) && (currIndex - 1 >= 0)) {
[result removeObjectAtIndex:currIndex - 1];
}
}
}
}
如下图、打印出来的组合方式即为我需要的组合方式
由于我们提交服务器的时候胜平负为3、1、0,所以这里需要我们自己处理下数据,就可以得到如图二所需的以上就是使用递归,简单处理数据,然当数据量特别庞大时候,会很卡,所以,类似于这种数据处理,还是交给后台处理最好,加油!!!
网友评论