问答题 1.  设计一个程序,当输入一个字符串时,要求输出这个字符串的所有排列。例如输入字符串abc,要求输出由字符a、b、c所能排列出来的所有字符串:abc,acb,bac,bca,cba,cab。
【正确答案】这道题主要考察对递归的理解,可以采用递归的方法来实现。当然也可以使用非递归的方法来实现,但是与递归法相比,非递归法难度增加了很多。下面分别介绍这两种方法。
   方法一:递归法
   下面以字符串abc为例介绍对字符串进行全排列的方法。具体步骤如下:
   (1)首先固定第一个字符a,然后对后面的两个字符b与c进行全排列;
   (2)交换第一个字符与其后面的字符,即交换a与b,然后固定第一个字符b,接着对后面的两个字符a与c进行全排列;
   (3)由于第(2)步交换了a和b破坏了字符串原来的顺序,因此,需要再次交换a和b使其恢复到原来的顺序,然后交换第一个字符与第三个字符(交换a和c),接着固定第一个字符c,对后面的两个字符a与b求全排列。
   在对字符串求全排列的时候就可以采用递归的方式来求解,实现方法如下图所示:
   
【答案解析】[考点] 如何求一个字符串的所有排列