1
我在下面的代码中生成了一个基于NSArray数字中的最高数字停止的斐波那契数列。我正在检查numbers数组中的数字是否都是斐波那契数。我如何比较数字和fibonacciArray,以便如果数字都是斐波纳契数字,我的函数将返回yes,如果数字数组中的某些数字不是斐波那契数字,则返回no?如何检查数组是否包含斐波那契数列?
编辑:下面是示例性测试阵列是否有帮助..
[self onlyFibonacciValues:@[@21, @2, @8, @3]];
[self onlyFibonacciValues:@[@21, @6, @2]];
- (BOOL)onlyFibonacciValues:(NSArray *)numbers {
NSArray *newNumbers = [numbers sortedArrayUsingDescriptors:@[[NSSortDescriptor sortDescriptorWithKey:@"intValue" ascending:YES]]];
NSMutableArray *sortedArray = [newNumbers mutableCopy];
NSInteger firstFibonacci = 1;
NSInteger secondFibonacci = 2;
NSInteger lastObjectInArray = [sortedArray.lastObject integerValue];
NSMutableArray *fibonacciArray = [NSMutableArray new];
[fibonacciArray addObject:[NSNumber numberWithInteger:firstFibonacci]];
[fibonacciArray addObject:[NSNumber numberWithInteger:secondFibonacci]];
while (lastObjectInArray > secondFibonacci) {
secondFibonacci = secondFibonacci + firstFibonacci;
firstFibonacci = secondFibonacci - firstFibonacci;
[fibonacciArray addObject:[NSNumber numberWithInteger:secondFibonacci]];
}
return YES;
}
如果数字是这样的,你的公式会工作吗? [self onlyFibonacciValues:@ [@ 21,@ 6,@ 2]]; – Jon 2014-10-07 03:07:52
@JonJungemann你的意思是你被允许在序列中有一个“洞”?..目前不是,但变化是相当小的... – dasblinkenlight 2014-10-07 03:09:21
对不起,我应该更具体的 – Jon 2014-10-07 03:11:17