美文网首页
斐波那契数列

斐波那契数列

作者: 落寒z | 来源:发表于2018-07-23 14:27 被阅读12次

斐波那契数列: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;
}

相关文章

网友评论

      本文标题:斐波那契数列

      本文链接:https://www.haomeiwen.com/subject/tgtjmftx.html