递归迭代区别&斐波那契数列

斐波那契数列


斐波纳契数列,又称黄金分割数列,指的是这样一个数列:1、1、2、3、5、8、13、21、……
这个数列从第三项开始,每一项都等于前两项之和。

 

 

递归在下面这篇文章中已经说的很详细

https://www.cnblogs.com/byErichas/p/15598504.html

 

今天来复习下迭代

以斐波那契数列为例子

迭代实现输出第n位的斐波那契数

int fib(int n){  
         if(n>1) return fib(n-1) + fib(n-2);  
         else return n; // n = 0, 1时给出recursion终止条件  
    }  
    //斐波那契数列递归 
int main(){
    int n,r;
    
    scanf("%d",&n);
    r = fib(n);
    printf("%d",r);
    //输出第n位的斐波那契数 
}

递归实现输出第n位的斐波那契数

#include<stdio.h>
int fib(int n){  
    int i, temp0, temp1, temp2;        
    if(n<=1) return n;  
    temp1 = 0;  
    temp2 = 1;  
    for(i = 2; i <= n; i++){  
        temp0 = temp1 + temp2;  
        temp1 = temp2;  
        temp2 = temp0;  
    }  
    return temp0;  
}
//斐波那契数量迭代 

int main(){
    int n,r;
    
    scanf("%d",&n);
    r = fib(n);
    printf("%d",r);
    //输出第n位的斐波那契数 
}

 

 

迭代与普通循环的区别是:迭代时,循环代码中参与运算的变量同时是保存结果的变量,当前保存的结果作为下一次循环计算的初始值。
递归与普通循环的区别是:循环是有去无回,而递归则是有去有回最后一层满足终止条件后,又开始一层层的返回。

 

Python写就更简单了

def fib(n):
    if n > 1:
        return fib(n - 1) + fib(n - 2)
    else:
        return n


def fib2(n):
    temp0 = 0
    temp1 = 1
    for i in range(2, n + 1):
        temp = temp0 + temp1
        temp0 = temp1
        temp1 = temp
    return temp


if __name__ == '__main__':
    n = int(input())
    print(fib(n))
    print(fib2(n))

 

posted @ 2021-11-30 16:12  Erichas  阅读(102)  评论(0编辑  收藏  举报