zoukankan      html  css  js  c++  java
  • 7.11牛客题(递归)

    1、对递归程序的优化的一般的手段为(A)
    A 尾递归优化
    B 循环优化
    C 堆栈优化
    D 停止值优化
    解析:https://www.cnblogs.com/Alexander-Lee/archive/2010/07/21/1782543.html
    尾递归

    在函数返回的时候,调用自身本身,并且,return语句不能包含表达式。这样,编译器或者解释器就可以把尾递归做优化,使递归本身无论调用多少次,都只占用一个栈帧,不会出现栈溢出的情况。 尾递归调用时,如果做了优化,栈不会增长,因此,无论多少次调用也不会导致栈溢出。 遗憾的是,大多数编程语言没有针对尾递归做优化。

    以斐波那契数列为例子
    普通的递归版本
    int fab(int n){
    if(n<3)
    return 1;
    else
    return fab(n-1)+fab(n-2);
    }
    具有"线性迭代过程"特性的递归—尾递归过程
    int fab(int n,int b1=1,int b2=1,int c=3){
    if(n<3)
    return 1;
    else {
    if(n==c)
    return b1+b2;
    else
    return fab1(n,b2,b1+b2,c+1);
    }
    }
    以fab(4)为例子
    普通递归fab(4)=fab(3)+fab(2)=fab(2)+fab(1)+fab(2)=3     6次调用
    尾递归fab(4,1,1,3)=fab(4,1,2,4)=1+2=3                           2次调用
    2、采用递归方式对顺序表进行快速排序,下列关于递归次数的叙述中,正确的是()
    递归次数与每次划分后得到的分区处理顺序无关。
    解析:
    递归次数,取决于递归树,而递归树取决于轴枢的选择。树越平衡,递归次数越少。
    快速排序的 递归的次数与 初始 数据的排列顺序有关。
    递归次数和数据排列有关 若有序,这次数为0(N)。理论上最少的次数为0(logN)。
    而对分区的长短处理顺序,影响的是递归时对栈的使用内存,而不是递归次数。先处理短的可以减小递归深度。

  • 相关阅读:
    syslog-ng:retint_careful导致机器hang
    [kernel学习]----好文章梳理
    ext4的一些特性
    [转载]查看Linux系统硬件信息实例详解
    dmidecode输出详解
    [Kernel参数]----/etc/sysctl.conf
    大数据竞赛平台Kaggle案例实战
    Python zip()函数的使用
    TensorFlow softmax的互熵损失
    TensorFlow 的softmax实例理解
  • 原文地址:https://www.cnblogs.com/zuiaimiusi/p/11169867.html
Copyright © 2011-2022 走看看