zoukankan      html  css  js  c++  java
  • 算法-递归算法

    一、递归算法

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

      递归的作用:
      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
  • 相关阅读:
    310. Minimum Height Trees
    279. Perfect Squares
    675. Cut Off Trees for Golf Event
    210. Course Schedule II
    407. Trapping Rain Water II
    vue-element-admin中如何vuex的使用
    webpack相关---vue-element-admin
    公共vendor是什么---vue-element-admin
    项目mock 模拟数据---vue-element-admin
    vue+ssr signalR---vue-element-admin
  • 原文地址:https://www.cnblogs.com/justLittleStar/p/13430603.html
Copyright © 2011-2022 走看看