递归
2015-08-21 23:08
148 查看
练习 4-12
运用 printd 函数的设计思想编写一个递归版本的 itoa 函数, 即通过递归
调用把整数转换为字符串。
练习 4-13
编写一个递归版本的 reverse(s)函数,以将字符串 s 倒置。
另外一个能较好说明递归的例子是快速排序。 快速排序算法是 C. A. R. Hoare 于 1962 年发明的。对于一个给定的数组,从中选择一个元素,以该元素为界将其余元素划分为两个子集,一个子集中的所有元素都小于该元索,另一个子集中的所有元素都大于或等于该元素。对这样两个子集递归执行这一过程,当某个子集中的元素数小于 2 时,这个子集就不需要再次排
序,终止递归。
运用 printd 函数的设计思想编写一个递归版本的 itoa 函数, 即通过递归
调用把整数转换为字符串。
练习 4-13
编写一个递归版本的 reverse(s)函数,以将字符串 s 倒置。
include <stdio.h> #include <string.h> int i = 0; void itoa(int n, char s[]) { if(n < 0){ s[i++] = '-'; n = -n; } if(n/10) itoa(n/10, s); s[i++] = n%10 + '0'; s[i] = '\0'; } void reverse(char s[], int i, int j) { if(i < j){ int temp = s[i]; s[i] = s[j]; s[j] = temp; reverse(s, ++i, --j); } } int main() { char s[100]; int n = -10086; itoa(n, s); printf("%s\n", s); reverse(s, 0, strlen(s)-1); printf("%s\n", s); return 0; }
另外一个能较好说明递归的例子是快速排序。 快速排序算法是 C. A. R. Hoare 于 1962 年发明的。对于一个给定的数组,从中选择一个元素,以该元素为界将其余元素划分为两个子集,一个子集中的所有元素都小于该元索,另一个子集中的所有元素都大于或等于该元素。对这样两个子集递归执行这一过程,当某个子集中的元素数小于 2 时,这个子集就不需要再次排
序,终止递归。
/* qsort: sort v[left] ... v[right] into increasing order */ void qsort(int v[], int left, int right) { int last, i; void swap(int [], int, int); if(left >= right) /* do nothing if array contains */ return; /* fewer than two elements */ swap(v, left, (left+right)/2); /* move partition elem */ last = left; /* to v[0] */ for(i = left+1; i <= right; i++){ /* partition */ if(v[i] < v[left]) swap(v, ++last, i); } swap(v, last, left); /* restore partition elem */ qsort(v, left, last-1); qsort(v, last+1, right); } void swap(int v[], int i, int j) { int temp; temp = v[i]; v[i] = v[j]; v[j] = temp; } #include <stdio.h> int main() { int i; int v[10] = {1,20,3,4,54,34,23,5,43,23}; qsort(v, 0, 9); for(i =0; i<10;i++) printf("%d ", v[i]); return 0; }
相关文章推荐
- HDU 2690 Boys and girls
- 王爽《汇编语言》第2版-----1、基础知识
- 剑指offer 不用加减乘除做加法
- 记录-使用CSDN-markdown编辑器
- HTTP协议简介
- uva 1318 - Monster Trap(bfs+暴力)
- 关于document.write
- 计算几何-经典算法-凸包
- 黑马程序员-JAVA基础之多线程
- android 单点登陆
- TLb和硬件Cache
- 数据结构之---C语言实现最短路径之Floyd(弗洛伊德)算法
- 如何制作 Objective-C 的UML图 [2]
- 宜昌IT软件资源汇总
- Andrew Ng的机器学习视频目录(from coursera, 2014)
- 2.1-apache配置静态缓存
- 【软件设计】六大设计原则讲解
- hdoj-1248【水&&floyd】
- IL中的栈和闪电的Owin推荐
- 文档收藏瘾的治疗配方(实现收集文档科学重复阅读的最佳实践)