一、介绍
递归两个基本要素:
1.边界条件(递归出口)
确定递归何时终止
2.递归模式(递归体)
大问题如何分解为小问题
二、递归实现字符串全排列
1.二话不说先上代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void swap(char *str,int i,int j){
char c;
c = str[i];
str[i] = str[j];
str[j] = c;
}
void pernutation(char *str,int start,int end){
if(start<end){//end condition
if(start+1 == end){ //每次
printf("打印全排列:%s\n",str);
return;
}else{
int i;
for(i=start;i<end;i++){
swap(str,start,i);//交换
printf("之前:%s,start:%d,i:%d\n",str,start,i);
pernutation(str,start+1,end);
swap(str,start,i);//回到之前的状态
printf("之后:%s,start:%d,i:%d\n",str);
printf("循环:%d\n",i);
}
}
}else{
printf("字符串长度不够!");
}
}
//主函数入口
int main()
{
char s[]="123"; //定义的字符串
pernutation(s,0,strlen(s));//调用递归函数
return 0;
}
2.运行结果
三、分析
可见和栈是一样一样的。
四、总结
你现在所遭受的灾祸,都是你过去某个时间段慵懒所造成的。