zoukankan      html  css  js  c++  java
  • 递归、尾递归

    为了理解递归,则必须首先理解递归。

    所谓递归,就是函数调用自身的一种方法。

    要理解递归,首先要引入栈的概念。栈是一种数据结构。

    简单的说,栈是存储数据的数据块,允许数据先进先出,类似于枪的弹匣。

    栈用来存放递归过程中产生的中间数据。如果有判断条件,直到栈中的数据全部出栈递归完成;否则栈的空间会一直增加,递归也会一直进行。

    为了避免这种现象,有时候我们要的结果是递归完后的结果,我们引入尾递归。

    所谓的尾递归,是递归的一种特例。

    是指把把递归的结果当成递归的参数,传给下一个递归。

    这样一来之前的栈中的参数就没效果了,所以如果编译器对此进行优化的话,按照道理尾递归就永远不可能溢出。

    下面来看下例子:

    打印1-1000这1000个数, 不许使用循环语句/条件语句,不许使用?:运算符。

    //1,递归

    int print(int i)

    {

    printf("%d\n",i++);

    assert(i-1001);//或者用任何一种异常退出程序,比如除法 int t=1/(i-1000)

    print(i);

    }

    //2,尾递归

    int print(int i)

    {

    return (1000-i++)&&print(i);//利用尾递归就不用用异常法退出递归了。

    }

  • 相关阅读:
    day15---作业
    day14---函数的参数
    day14作业
    day--13函数的基本使用
    day13--函数练习(作业)
    day12--文件处理
    day12--作业
    Python函数对象、函数嵌套和闭包函数
    每日作业以及周末作业
    Python名称空间与作用域
  • 原文地址:https://www.cnblogs.com/273809717/p/2831192.html
Copyright © 2011-2022 走看看