美文网首页
斐波那契数列

斐波那契数列

作者: 落寒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