zoukankan      html  css  js  c++  java
  • 递归模式学习(recursion)

    所谓递归,就是方法调用自身。对于递归模式来说,要有一个出口来让递归结束,避免出现死循环。

    实例全排列:

    从n中拿出m个元素进行排列,当n==m时为全排列。

    利用递归就是:把n个元素轮流放入第一个位置,剩余位置全排列(等同于(n-1)全排列+剩余的元素)

    设置出口:当n-1等于1时说明递归到最后一个元素,回调。

     1 package com.zhanghaobo.arrangement;
     2 
     3 /**
     4  * @author Administrator
     5  *排列方法:轮流把数组中元素放入第一个位置,剩余元素全排列(递归),直至剩余元素为1,排列完成。
     6  *begin++当begin==end时说明递归到出口,返回
     7  */
     8 /**
     9  * @author Administrator
    10  *
    11  */
    12 public class ArrangementTest {
    13 
    14     public static void main(String[] args) {
    15         int[] nums=new int[]{1,2};
    16         arrangment(nums, 0, nums.length-1);
    17         
    18     }
    19     /**
    20      * @param a
    21      * @param begin
    22      * @param end
    23      * 将数组a中的从begin-end位置的元素全排列
    24      */
    25     public static void arrangment(int[] a,int begin,int end){
    26         
    27         if(end==begin){ 
    28             for(int b:a){
    29                 System.out.print(b);
    30             }
    31             System.out.println("");
    32             return;
    33         }
    34         else{
    35             //begin从0开始进行全排列直至begin==end;循环完成一轮后要恢复到原来数组的状态以便下个轮换
    36                 
    37             for(int i=0;i<=end;i++){
    38                 swap(a,begin, i);
    39                 arrangment(a,begin+1,end);
    40                 swap(a,begin,i);                    
    41             }
    42         }
    43     }
    44     
    45     /**
    46      * 其他位置上的元素轮流和begin位置互换,以便其他元素全排列
    47      */
    48     public static void swap(int[] a,int begin,int other){
    49         int temp=a[begin];
    50         a[begin]=a[other];
    51         a[other]=temp;
    52     }
    53 }
  • 相关阅读:
    左偏树——可以标记合并的堆
    主席树——多棵线段树的集合
    [中山市选2011]完全平方数 ——莫比乌斯函数
    决策单调性优化dp
    [NOI2015]寿司晚宴——状压dp
    【[国家集训队]等差子序列】
    线性基——数集压缩自动机
    Java实现 蓝桥杯VIP 算法训练 筛选号码
    BSGS&EXBSGS 大手拉小手,大步小步走
    CRT&EXCRT 中国剩余定理及其扩展
  • 原文地址:https://www.cnblogs.com/oldcownotGiveup/p/5368198.html
Copyright © 2011-2022 走看看