美文网首页算法
迭代是人,递归是神

迭代是人,递归是神

作者: 大梦一场三十一 | 来源:发表于2018-05-01 20:07 被阅读0次
怎么去正视迭代与递归呢?

正如数学之美所说,To iterate is human,to recurse divine.迭代是人,递归是神。


以斐波那契数列来作为表示
fib(0)=0;
fib(1)=1;
fib(n)=fib(n-1)+fib(n-2);


迭代,更加符合我们的思维方式,我们更加容易去写出来。就如上述的表示方法来说,大部分的人都可以简单的去理解它。那我们用代码表示的话就是下面简单的代码。便于人思考,理解,去写,去寻找错误。但是有一个问题,不断的调用这个函数的话带来大量不必要的开支,消耗大量的时间。具体解释见此

int fib(int n){  
     if(n>1) return fib(n-1) + fib(n-2);  
     else return n; // n = 0, 1时给出recursion终止条件  
}

递归,更加符合计算机计算的方式,有利于计算速度。不必不断的调用函数,以减少开支。代码如下:

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;  
} 

你们可以将代码带入一个数字计算一下可以在45左右。对比可知。

爬楼梯

附上一道基础的爬楼梯的题目:

假设你正在爬楼梯。需要 n 步你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
注意:给定 n 是一个正整数。

示例 1:

输入: 2
输出: 2
解释: 有两种方法可以爬到楼顶。

  1. 1 步 + 1 步
  2. 2 步
示例 2:

输入: 3
输出: 3
解释: 有三种方法可以爬到楼顶。

  1. 1 步 + 1 步 + 1 步
  2. 1 步 + 2 步
  3. 2 步 + 1 步

迭代:

int climbStairs(int n) {
        if(n <= 2)
            return n;
        if(n > 2)
            return climbStairs(n-1)+climbStairs(n-2);
    }

递归:

    int climbStairs(int n) {
    int i, temp0, temp1, temp2;        
    if(n<=2) return n;  
    temp1 = 1;  
    temp2 = 2;  
    for(i = 3; i <= n; i++){  
        temp0 = temp1 + temp2;  
        temp1 = temp2;  
        temp2 = temp0;  
    }  
    return temp0; 
    }

相关文章

  • 迭代是人,递归是神

    怎么去正视迭代与递归呢? 正如数学之美所说,To iterate is human,to recurse divi...

  • 深究递归和迭代的区别、优缺点及实例对比

    1.迭代是人,递归是神! 从“编程之美”的角度看,可以借用一句非常经典的话:“迭代是人,递归是神!”来从宏观上对二...

  • 递归算法

    To iterate is human, to recurse, divine.人理解迭代,神理解递归。 什么是递...

  • 超脱自然,非同凡响!C语言递归算法

    俗话说“”迭代是人,递归是神“” 那递归神在什么地方? 简单地说,递归是函数内的层层循环找结果 引用一下专业术语:...

  • 递归

    To iterate is human, to recurse, divine.人理解迭代,神理解递归。 人的思维...

  • 递归是神

    created by Dejavu(完结) 有段日子一直在学习opencv,但是有些书中的功能代码经常忘记,因此方...

  • 迭代与递归(基础版)

    问题: 1.迭代 2.递归 通过实验可知,迭代运行速度比递归要快 用递归实现阶乘运算 迭代和递归的区别 迭代与递归...

  • 基础 5.6. 递归,分治

    递归实际上和迭代是一样的,递归能做的迭代一样能做, 递归为什么存在呢?因为有时候,用递归更加容易实现 分治 就是把...

  • LC341. Flatten Nested List Itera

    递归和迭代的区别: 递归是自己调用自己,必须要有一个出口,即递归结束的条件。 迭代是下一步使用原值推算出的结果。 ...

  • 递归、迭代与递推三者的差别

    递归,递推,迭代的区别_csdn链接 递归: 程序调用自身的编程技巧称为递归,是函数自己调用自己。 使用递归要注意...

网友评论

    本文标题:迭代是人,递归是神

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