zoukankan      html  css  js  c++  java
  • 递归

    • 递归模式:

                         多递归基:为保证有穷性,递归算法都必须设置递归基,且确保总能执行到。为此,针对每一类可能出现的平凡情况,都需设置对应的递归基,故同一算法的递归基可能(显式或隐式的不止一种);

                        例如:数组倒置问题:
     
    void reverse (int *,int,int);
    void reverse (int * A, int n){
         reverse(A,0,n-1);
    }
    void reverse (int *  A, int l, int r){
         if  ( l < r ) {//递归基可能是l=r或者l>r
              swap(A[l],A[r]);
              reverse(A, l+1, r-1);
         }
    }

                        多向递归:递归调用可能有多种可供选择的分支

                        例如:计算幂函数 。按照线性递归的构思,该函数可重新定义如下:
                                                               
                        若从其他角度分析,可给出:
                                                                  
                                                                
                        一般的,若n的二进制展开式为: ,则:
    的二进制展开式分别为: ,则有:
                                                                    
    由此,可归纳得如下递推式:
                                                               
    基于这一递归式,有如下多项递归版本:
     
    inline __int64 sqr( __int64 a ) {
        return a   *  a ;
    }
     
    __int64 power2_re ( __int64 n ) {
        if ( n == 0)
        {
            return 1;
        }
        return ( n & 1) ? sqr ( power2_re( n >> 1)) * 2 : sqr ( power2_re( n >> 1));
    }
    上述递归算法的时间复杂度为: ,因为每次递归调用入参均缩小一半
  • 相关阅读:
    爬虫笔记(四)------关于BeautifulSoup4解析器与编码
    sublime_text_2 ubuntu下无法输入中文 解决方法
    PHP 随手记
    PHP与apache环境配置
    5分钟学会如何创建spring boot项目
    Java 解压zip压缩包
    利用JavaScript来实现用动态检验密码强度
    金融行业是如何丢失1分钱的
    Java多线程的三种实现方式
    教你如何快速定制 SpringBoot banner
  • 原文地址:https://www.cnblogs.com/joh-n-zhang/p/5766755.html
Copyright © 2011-2022 走看看