斐波那契数列:1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ...
第0,1位置都为1,从第3项开始,每一项都等于前两项之和。
当n = 0时; F(n) = 1;
当n = 1时; F(n) = 1;
当n > 1时; F(n) = F(n-1)+F(n-2);
Q:使用OC来实现N的值,N从0开始
A:方式一:递归调用
- (NSInteger)getFibonacciValue:(NSInteger) n {
if (n < 2) {
return 1;
}
return [self getFibonacciValue:n - 1] + [self getFibonacciValue:n - 2];
}
A:方式二:数组获取
- (NSInteger)getFibonacciValueForArr:(NSInteger) n {
NSMutableArray *arrM = [NSMutableArray arrayWithCapacity:n + 2];
[arrM addObject:@(1)]; //0
[arrM addObject:@(1)]; //1
if (n >= 2) {
for (NSUInteger i = 2; i <= n; i++) {
NSInteger value = [arrM[i - 1] integerValue] + [arrM[i - 2] integerValue];
[arrM insertObject:@(value) atIndex:i];
}
}
return [arrM[n] integerValue];
}
A:方式三:加法交换
- (NSInteger)getFibonacciValueForExchange:(NSInteger) n {
if (n < 2) {
return 1;
}
NSInteger preNum = 1;//初始化设定第0个元素值
NSInteger currentNum = 1; //初始化第1个元素值
NSInteger tmp = 0;
for (NSUInteger i = 2; i <= n; i++) {
tmp = preNum + currentNum;
preNum = currentNum;
currentNum = tmp;
}
return currentNum;
}
网友评论