输出斐波那契数列的第N项(递归 与非递归)

最近遇到了这样的一道题目,要求用两种方式输出斐波那契数列的第N项 。
下面是两种方式 感觉还可以再优化,当然还可以使用do while 以及其他种方式实现。
第一种方法(递归实现)

 /**
 斐波那契数列(for 循环)
 @param number 输入位置对应的数
 @return 输出结果
 */    
- (int)fibonacciNumbers:(int )number
{
    static int m = 1;
    static int n = 1;
    if (number>=3){
        int result = [self FibonacciNumbers:number-1];
        m = n + result;
        n = result;
    }
    else{
        return 1;
    }
    return m;
}

第二种方法(非递归实现)

/**
 斐波那契数列(for 循环)
 @param number 输入位置对应的数
 @return 输出结果
 */
- (int)fibonacciNumbers:(int)number{
    int m = 1;
    int n = 1;
    int result = 1;
    if (number>=2) {
        for (int i = 1; i<number; i++) {
            result = m;
            m = result + n;
            n = result;
        }
    }
    return result;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容