• 算法-递归算法


    一、递归算法

      一个函数调用其自身就是递归函数。

      递归的作用:
      1)  替代多重循环
      2)  解决本来就是用递归形式定义的问题
      3)  将问题分解为规模更小的子问题进行求解

      递归的基本法则:

      1) 存在一些基准情形,无需递归就能直接求解

           2) 递归函数总是向着基准情形推荐

    具体例子如下: a)汉诺塔   b)阶乘  c)斐波那契数列 

    // 汉诺塔n个盘子,将盘子从src座移到dest座,以mid为终点站 
    void Hanoi( int n, char src, char mid, char dest )
    {
        if ( n == 1 ) { // 一个盘子 
            printf("%c -> %c
    ", src, dest);
            return; 
        }    
        Hanoi( n-1, src, dest, mid );// 先从src移动n-1个盘子到mid
        printf("%c -> %c
    ", src, dest); // 将大盘子从src移到dest 
        Hanoi( n-1, mid, src, dest );// 最后从mid移动n-1个盘子到dest 
        return; 
    } 
     
    int Factorial( int n ) 
    {
        if ( n == 0) {
            return 1;
        }
        return n * Factorial( n-1 );
    } 
    
    int Fibonacci(int n) 
    {
        if ( n == 0 || n == 1 ) {
            return 1;
        }
        return Fibonacci(n - 1) +  Fibonacci(n - 2);
    } 
    
    int fibo(int n)
    {   // 动态规划版
        if (n < 1) 
            return -1; 
        int F[n+1]; 
        F[1] = 1; 
        F[2] = 1; 
    
        for (int i = 3; i <= n; i++) {
            F[i] = F[i-1] + F[i-2]; 
        }
        return F[n]; 
    }
    
    
    int main(int argc, char *argv[])
    {
        int n;
        printf("Factorial: ");
        scanf("%d", &n);
        printf("%d
    ", Factorial(n));
        
        printf("Fibonoci: ");
        scanf("%d", &n);
        printf("%d
    ", Fibonacci(n));    
        
        printf("Hanoi: ");
        scanf("%d", &n);
        Hanoi( n, 'A', 'B', 'C' );
        
        return 0;
    }

    d) 求幂(python版)- 主要是利用tmp存储中间变量,避免重复计算

    def pow(x, y):
        if 0 <= y <= 1:
            return x if y == 1 else 1
        elif y > 1:
            if y % 2 == 0:
                tmp = pow(x, y // 2)        
                return tmp * tmp
            else:
                return pow(x, y - 1) * x
  • 相关阅读:
    Kafka Eagle安装
    CentOS下OpenJDK设置JAVA_HOME
    设计模式:解释器模式
    Typora主题推荐
    SpringMVC的<mvc:annotation-driven />
    SpringMVC的视图解析器
    数字化营销
    《计算广告》第二版思维导图
    舆情计算
    实时数仓
  • 原文地址:https://www.cnblogs.com/justLittleStar/p/13430603.html
Copyright © 2020-2023  润新知