当前位置:首页 > c语言数据结构 - 图文
问题4.4:代码实现*
#include
int Mark[MAX] = {0}; /*标记数组,用来标记某个数字是否已被使用成为*/char Stack[MAX+1]; /*全排列数字串*/
void rank(int m, int n); /* m记录下一个要生成的全排列数字应放在Stack中的位置,n表示还剩几个数字需要
生成*/
int N;int main (){
scanf (\rank(0,N);return 0;}
void rank(int m, int n){
int i;
if( n == 0){
Stack[m] = '\\0';
puts(Stack);/* 输出全排列数字串*/return;
}
for(i=1; i<=N; i++)
if(Mark[i] == 0 ){
Mark[i] = 1; /* 标记该数字已被使用*/Stack[m] = '0'+i; /*将当前数字加到全排列数字串中*/rank(m+1,n-1); /* 生成全排列中下一个数字*/Mark[i] = 0;/*释放该数字*/
}}
递归(续):递归问题总结*
?
通常包含如下特性的问题适合应用递归方法解决:
??
问题包含一个(或多个)基本实例,如0! = 1问题的解可以简化为包含比当前问题更简单一步的问题的解,并且最终问题解可归结到基本实例,如n! = n*(n-1)!, 0!=1。
共分享92篇相关文档