数据结构第一节课
递归要费大力气,老师强调了对计算机经典书籍的阅读要尽可能的读英文版,便于理解,同时筛除翻译不好造成的时间成本。(英语要好也太难了。。。。。)
强调要准备两本英语字典:1.计算机字典 2.科技字典 ps:字典要用最新版(计算机科学发展过快)
要包含不同方向的词汇
要有名词解释文字说明
留了两个递归问题让我们尝试:
1.n个整数调出最小的整数(递归实现)
int findmin(int a[],int n) { int m; if(n<=1) return a[0]; else{ m=findmin(a,n-1); return a[n-1]<m?a[n-1]:m; } }
递归:n->n-1->.....->1;
2.n个整数全排列;
全排列就是从第一个数字起每个数分别与它后面的数字交换。
伪代码:
allArrange(str,k,m)
{
if k==m print;
for i=k to m{
swap(str,k,i);
allArrange(str,k+1,m);
swap(str,k,i);}
}
#include<stdio.h> #include<string.h> void swap(char*a,char*b) { char temp; temp=*a; *a=*b; *b=temp; } void Allarrange(char *str,int k,int len) { int i; if(k==len) { static int s_i=1; printf("第%d种排列为:\t%s\n",s_i++,str); } else { for(i=k;i<=len;i++) { swap(str+i,str+k); Allarrange(str,k+1,len); swap(str+i,str+k); } } }