在做递归问题时,要保证对递归跳跃的信任,继而对相应的问题寻找其递归实现
(1)组合:先从原始数组中选择一个,再从剩下的集合中选择m-1个;而后,再从剩下的集合中挑选m个元素。
/*组合代码(eg:5选2)*/int a[5]={ 1,2,3,4,5};//原始数组int b[2];//挑选的结果const int need=2;//需要选择的个数void combine(int start,int end,int x){ if(x==need) { //(1)打印组合的内容 for(int i=0;i
(2)排列:为了列出一个长度为n的字符串的所有排列,可以一次挑选n个字母中的一个;然后在后面列出其余的n-1个字母可能的排列组合。
/*排列函数*//*参数:c 为 int 型数组的地址 start 为排列数组的起始下标 end 为排列数组的结束下标+1*/void permute(int c[],int start,int end){ if(start==end) //挑选完毕 { /*打印数组*/ for(int i=0;i
问题牵引:在对字符数组进行排序的时候,应当注意传入参数的方式,即 char str[] 和 char * str的区别
(1)char * str 的str,指向一块内存区域,可以随时改变;但其指向的内容不可以修改
(2)char str[] 其地址不可改变,即常量指针;但数组内容可以改变