用Java编写程序;求字母A和B的各种排列组合(递归思想)

用Java编写程序;求字母A和B的各种排列组合(递归思想),第1张

//PS:不太明白函数中String s的意义,所以忽略了。

import javautilArrayList;  

import javautilList;  

  

  

public class CompoundString {  

    

    private static void generate(int n,List<String> results) {   

        if(n==1){

         return;

        }

     List<String> resultsTemp_A = new ArrayList<String>();

     List<String> resultsTemp_B = new ArrayList<String>();

     for(String str : results){

         String temp_A = str+"A";

         resultsTemp_Aadd(temp_A);

         String temp_B = str+"B";

         resultsTemp_Badd(temp_B);

        }

     //此处results引用不能改变,否则任何修改对main函数中的results都无效

     resultsclear();

     resultsaddAll(resultsTemp_A);

     resultsaddAll(resultsTemp_B);

     generate(n-1, results);  // recursive

    }  

  

    public static void main(String[] args) {  

     List<String> results = new ArrayList<String>();

     resultsadd("A");

     resultsadd("B");

     generate(8, results);

     for(String str : results){

     Systemoutprintln(str);

     }

    }  

}

什么算法是自我调节的过程

递归算法是自我调节的过程

分支转向是算法的灵魂;函数和过程及其之间的相互调用,是在经过抽象和封装之后,实现分支转向的一种

重要机制;而递归则是函数和过程调用的一种特殊形式,即允许函数和过程进行自我调用。因其高度的抽象性和简洁性,递归已成为多数高级程序语言普遍支持的一项重要特性。比如在C++语言中,递归调用Q(recursive call)就是某一方法调用自身。这种自我调用通常是直接的,即在函数体中包含一条或多条调用自身的语句。递归也可能以间接的形式出现,即某个方法首先调用其它方法,再辗转通过其它方法的相互调用,最终调用起始的方法自身。

    int recursive(int n)

{  

    if (n <= 2)

        return n;

    return recursive(n - 1) + 2  recursive(n - 2);

}

int iterative(int n)

{  

    int f1 = 1, f2 = 2, f;  

    for (int i = 3; i <= n; ++i) 

    {  

        f = f2 + 2  f1;  

        f1 = f2; 

        f2 = f; 

    }  

    return f;   

}

递归(recursion):程序调用自身的编程技巧。

递归满足2个条件:

1)有反复执行的过程(调用自身)

2)有跳出反复执行过程的条件(递归出口)

递归例子:

(1)阶乘

n! = n (n-1) (n-2) 1(n>0)

//阶乘

int recursive(int i)

{

int sum = 0;

if (0 == i)

return (1);

else

sum = i recursive(i-1);

return sum;

}

(2)河内塔问题

//河内塔

void hanoi(int n,int p1,int p2,int p3)

{

if(1==n)

cout<<"盘子从"<<p1<<"移到"<<p3<<endl;

else

{

hanoi(n-1,p1,p3,p2);

cout<<"盘子从"<<p1<<"移到"<<p3<<endl;

hanoi(n-1,p2,p1,p3);

}

}

(3)全排列

从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列。当m=n时所有的排列情况叫全排列。

如1,2,3三个元素的全排列为:

1,2,3

1,3,2

2,1,3

2,3,1

3,1,2

3,2,1

//全排列

inline void Swap(int &a,int &b)

{

int temp=a;

a=b;

b=temp;

}

void Perm(int list[],int k,int m)

{

if (k == m-1)

{

for(int i=0;i<m;i++)

{

printf("%d",list[i]);

}

printf("n");

}

else

{

for(int i=k;i<m;i++)

{

Swap(list[k],list[i]);

Perm(list,k+1,m);

Swap(list[k],list[i]);

}

}

}

以上就是关于用Java编写程序;求字母A和B的各种排列组合(递归思想)全部的内容,包括:用Java编写程序;求字母A和B的各种排列组合(递归思想)、什么算法是自我调节的过程、楼梯有n阶台阶,上楼可以一步上1阶,也可以一步上2阶,用C++或lua语言编一程序计算共有多少种不同的走法等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10079301.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存