导航:首页 > 编程语言 > java全排列递归算法

java全排列递归算法

发布时间:2023-06-11 12:22:33

java全排列递归算法

不会JAVA只能是写个搜胡信C的了
#include<做肆stdio.h>
#include<世轮string.h>
const int MAX=10;
int n;
bool used[MAX]={false};
int a[MAX];
int ans[MAX];
void DFS(int deep)
{
int i;
if(deep==n)
{
for(i=0;i<n;i++)
{
printf("%d ",ans[i]);
}
puts("");
return ;
}
for(i=0;i<n;i++)
{
if(used[i])continue;
used[i]=true;
ans[deep]=a[i];
DFS(deep+1);
used[i]=false;
}
}
int main()
{
int i;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}

DFS(0);
return 0;
}

② 用java递归方法实现

publicintfun(intn){
if(n==0||n==1)return1;
returnn*fun(n-1);
}

③ java全排列 数组

全排列算法很多,这是其中一个,使用递归——


import java.util.ArrayList;
import java.util.List;
public class PermAComb {
static List<int[]> allSorts = new ArrayList<int[]>();

public static void permutation(int[] nums, int start, int end) {
if (start == end) { // 当只要求对数组中一个数字进行全排列时,只要就按该数组输出即可
int[] newNums = new int[nums.length]; // 为新的排列创建一个数组容器
for (int i=0; i<=end; i++) {
newNums[i] = nums[i];
}
allSorts.add(newNums); // 将新的排列组合存放起来
} else {
for (int i=start; i<=end; i++) {
int temp = nums[start]; // 交换数组第一个元素与后续的元素
nums[start] = nums[i];
nums[i] = temp;
permutation(nums, start + 1, end); // 后续元素递归全排列
nums[i] = nums[start]; // 将交换后的数组还原
nums[start] = temp;
}
}
}

public static void main(String[] args) {
int[] numArray = {1, 2, 3, 4, 5, 6};
permutation(numArray, 0, numArray.length - 1);
int[][] a = new int[allSorts.size()][]; // 你要的二维数组a
allSorts.toArray(a);

// 打印验证
for (int i=0; i<a.length; i++) {
int[] nums = a[i];
for (int j=0; j<nums.length; j++) {
System.out.print(nums[j]);
}
System.out.println();
}
System.out.println(a.length);
}
}

④ java全排列递归算法一个小问题

是真心没看懂你再说什么
什么没拆猜叫先输入枯型要求输入的字符个数? 你御老这原题 或者 原需求是什么 你写出来我给你CODE

⑤ java中递归算法是什么怎么算的

一、递归算法基本思路:

Java递归算法是基于Java语言实现的递归算法。递归算法是一种直接或者间接调用自身函数或者方法的算法。递归算法实质是把问题分解成规模缩小的同类问题的子问题,然后递归调用方法表示问题的解。递归往往能给我们带来非常简洁非常直观的代码形式,从而使我们的编码大大简化,然而递归的思维确实跟我们的常规思维相逆的,通常都是从上而下的思维问题,而递归趋势从下往上的进行思维。

二、递归算法解决问题的特点:

【1】递归就是方法里调用自身。

【2】在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口。

【3】递归算法代码显得很简洁,但递归算法解题的运行效率较低。所以不提倡用递归设计程序。

【4】在递归调用的过程中系统为每一层的返回点、局部量等开辟了栈来存储。递归次数过多容易造成栈溢出等,所以一般不提倡用递归算法设计程序。

【5】在做递归算法的时候,一定把握出口,也就是做递归算法必须要有一个明确的递归结束条件。这一点是非常重要的。其实这个出口就是一个条件,当满足了这个条件的时候我们就不再递归了。

三、代码示例:

publicclassFactorial{

//thisisarecursivefunction

intfact(intn){

if(n==1)return1;

returnfact(n-1)*n;

}}
publicclassTestFactorial{publicstaticvoidmain(String[]args){

//TODOAuto-generatedmethodstub

Factorialfactorial=newFactorial();

System.out.println("factorial(5)="+factorial.fact(5));

}
}

代码执行流程图如下:

此程序中n=5就是程序的出口。

⑥ 关于全排列递归算法

这个算法,是把每一个数与末尾的数逐一交换,
k>m 说明已交换完毕,就输出了,这是递归的结束条件。
要学到一定的基本功才能明白。
---------------------------------------------------------------------------
我这个程序,我也编过,放在西祠C++BUILDER论坛里。
你先要掌握,排列的方法才能看懂这个程序。
在这知道里,也答过两次。
为了增加可理解性,我略改了一下方法,我的方法
与你的方法递归方向不同。
http://www.xici.net/d190786398.htm
此算法为递归法显示排列数,没发现比这更简单、明了的递
归算法。此算法只要练智商的作用,没有其它实用价值,阶
乘级的占用时间、空间,数一大,堆栈很快暴了。
算法的要点:
1.列N个数的排列,可化为N个的N-1阶排列:
最末一个数是 D[n-1],把这个位置的N个数的可能性列出,
就是每一个数 与末尾逐一交换位置,就是N种情况,每一种
情况再求N-1的全排列,就是递归调用了;
交换位置后,就调用自已,但必须恢复刚才的交换,以便下一次
交换;
2.当阶数递归到1时,就直接输出这N个数;

⑦ java 1-5随机排列,求所有不同排列,怎么用递归方式实现

//需要三个参数,k表示当前的数,m表示数的个数
Perm(char*pszStr,intk,intm)
{
if(k==m)
{
staticints_i=1;
cout<<”第”塌兄<<s_i++<<”个排列”<<pszStr<<endl;
}
运巧团悄袭else
{
for(inti=k;i<=m;i++)//第i个数分别与它后面的数字交换就能得到新的排列
{
Swap(pszStr+k,pszStr+i);
Perm(pszStr,k+1,m);
Swap(pszStr+k,pszStr+i);
}
}
}

阅读全文

与java全排列递归算法相关的资料

热点内容
C51编译器在标准C的基础上 浏览:260
银行卡掉了可以办车贷解压吗 浏览:317
没解压可以贷款吗 浏览:517
最小pdf阅读器 浏览:808
游戏被加密了怎样用电脑打开 浏览:300
蓝灯如何手动选择服务器 浏览:85
服务器设置在中国意味什么 浏览:571
单片机不能进行选择控制 浏览:694
咕咚手表如何绑定手机app 浏览:530
命令虚拟语气 浏览:405
戴尔系统命令 浏览:583
怎样压缩视频文件大小 浏览:686
51单片机信号发生器 浏览:56
米拍摄影哪个app好 浏览:88
天津致远曙光服务器云服务器 浏览:117
光子程序员怎么获得 浏览:535
中医诊断学第九版pdf 浏览:498
python集成包 浏览:305
如何用电脑解压缩文件 浏览:448
pubg用什么服务器 浏览:528