算法递归思想

Posted lpworld

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法递归思想相关的知识,希望对你有一定的参考价值。

给定一个字符串(该字符串没有相同的字母),使用递归的方式打印出这个字符串所包含字母的所有组合方式

 

package test1;

public class num 
    public static void main(String[] args) 
        char[] c= ‘a‘,‘b‘,‘c‘,‘d‘;
        f(c,0);
    
    
    /* c为待递归数组,先确定第一个字符,再确定第二个...b为所有已确定字符位的后一个字符位 */
    static void f(char c[],int b) 
        if(b==c.length-1) 
            /* 如果b已经是最后一个字符,所有字符已经确定 */
            System.out.println(c);//打印字符串,结束循环。
        else 
            /* 如果b不是最后一个字符 */
            for(int i=b;i<c.length;i++) 
                swap(c,b,i);//b和自己以及和之后的字符交换,使未确定每一个字符都有在b位确定的机会,【已经确定字符】【b】【剩下的字符】——》【已经确定字符】【i】【剩下的字符】
                f(c,b+1);//确定下一位
                swap(c,i,b);//因为i++后的i位还要和原来的b位交换,保证每一个字符都有在b位确定的机会,【已经确定字符】【i】【剩下的字符】——》【已经确定字符】【b】【剩下的字符】
            
        
    
    
    /* 交换数组中两个字符位置 */
    static void swap(char c[],int a,int b) 
        char t=c[a];
        c[a]=c[b];
        c[b]=t;
    

 

递归的思想:

1.递归函数是上司,上司完成自己要做的事,然后交给 下属 干剩下的事

2.递归函数既是长官,又是下属,干完自己分内的事,剩下交给属下干

3.递归函数最后由最后的下属完成

例如:

1。f是最大上司,手上有为(0~L)位字符数组c,f的任务是从c里选一个字符确定在b(b=0)位,然后把字符串c剩下(1~L)的位交给下属确定,告诉下属b位和b位前的字符已经确定

2。下属拿到字符串c后,再选b位以及b位之后的一个字符确定在b位(因为b位之前的字符已经被上司确定了),然后剩下((b+1)~L)的位交给下属确定,告诉下属b位和b位前的字符已经确定

3。最后的下属要确定L位,由于之前的字符都已经确定,L位没得选,所以这名下属打印这个字符串,而且不继续给自己的下属任务。

 

以上是关于算法递归思想的主要内容,如果未能解决你的问题,请参考以下文章

算法初步--递归思想(java实现)

算法初步--递归思想(java实现)

Python算法——递归思想

python算法之递归思想

Java算法——递归思想

算法递归思想