递归、全排列概念的了解
- 递归:把一个复杂问题,转化为一个个与原问题相似的简单问题,再来求解;其实就是找实体自己和自己的关系,然后调用本身的函数来解决,这能大大地减少了程序的代码量。
(该函数不断的调用自身,直到最后返回结果)
递归三要素:
1.重复(什么地方的操作,与本身的操作相同) return本身函数>>也就是调用本身函数
2.变化(继续递归的参数)
3.出口(什么时候该退出递归)return最终值
-
全排列:返回数组内元素的所有排列情况。例如输入数组1、2、3,则打印出1、2、3 所能排列出来的所有情况 123、132、213、231、321、312
-
深度优先搜索:Depth first search>>简称dfs
不理解么?那咱们先背下来呗~
全排列直接套用的代码
public class 全排列_CSDN {
public static void main(String[] args) {
//待排列数组
int a[] = {1,2,3};
//Permutation>>全排列;perm(待排列数组,排列开始位置,排列结束位置)
perm(a, 0, a.length);
}
public static void perm(int arr[], int start, int end) {
if (start == end) {
//确定一个排列,并循环输出
for (int temp : arr) {
System.out.print(temp);
}
System.out.println();
}
else {
for (int i = start; i < arr.length; i++) {
swap(arr, start, i);//交换
perm(arr, start + 1, end);//递归
swap(arr, start, i);
}
}
}
//swap>>交换;交换数组i、j位置的元素
public static void swap(int arr[], int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
运行结果:
温馨提示:
喜欢灰碟分享的小伙伴不要忘记关注噢~这样子,想找我时就不会迷路啦*