实例之递归
优点
递归使代码看起来更加整洁、优雅
可以用递归将复杂任务分解成更简单的子问题
使用递归比使用一些嵌套迭代更容易
缺点
递归逻辑很难调试,递归条件处理不好容易造成程序无法结束,直到达到最大递归错误
递归占用大量内存,耗费计算机资源
汉诺塔
#include <stdio.h> //hanoi函数的意思就是把第一个字符型(x)移到第三个字符型(z)。 void hanoi(int n, char x, char y, char z); void hanoi(int n, char x, char y, char z) { if (n == 1) { printf("%c --> %c\n", x, z); } else { hanoi(n - 1, x, z, y); // 把x的放到y上,因为(n-1),所以剩下一个 printf("%c -- > %c\n", x, z); // x剩下的一个放到z上 hanoi(n - 1, y, x, z); // 把y的放到z上 //不需要套用循环条件,只要是把自身调用结束了就相当于多次循环了 } } int main() { int n; printf("scanf_s one number:"); scanf_s("%d", &n); hanoi(n, 'X', 'Y', 'Z'); return 0; }
快速排序
#include <stdio.h> void quick_sort(int array[], int left, int right) { int i = left, j = right; int temp; int pivot; pivot = array[(left + right) / 2]; while (i <= j) { // 从左到右找到大于基准点的元素 while (array[i] < pivot) { i++; } // 从左到有找到小于基准点的元素 while (array[j] > pivot) { j--; } // 如果i <= j,则互换 if (i <= j) { temp = array[i]; array[i] = array[j]; array[j] = temp; i++; j++; } } if (left < j) { quick_sort(array, left, j); } if (i < right) { quick_sort(array, i, right); } } int main() { int array[] = {4, 1, 5, 7, 8, 3, 2, 9, 10, 6 }; int i, length; length = sizeof(array) / sizeof(array[0]); quick_sort(array, 0, length - 1); return 0; }
斐波那契数列
/法1/
#include <stdio.h> #include <string.h> #define N 20 int f[N + 1]; int fib(int n) { if(f[n]) return f[n]; else if(n == 1 || n == 2) return f[n] = 1; else { if(f[n - 2] == 0) f[n - 2] = fib(n - 2); if(f[n - 1] == 0) f[n - 1] = fib(n - 1); return f[n] = f[n - 2] + f[n - 1]; } } int main(void) { memset(f, 0, sizeof(f)); int n, a; scanf("%d", &n); while(n--) { scanf("%d", &a); printf("%d\n", fib(a)); } return 0; }
/法2/
#include <stdio.h> int fib(int n) { return(n == 1 || n == 2) ? 1 : fib(n-2) + fib(n-1); } int main() { int n, a; scanf("%d", &n); while(n--){ scanf("%d", &a); printf("%d\n", fib(a)); } return 0; }
模拟实现 树形结构的遍历
import os #引入文件操作模块 def findFile(file_Path): listRs = os.listdir(file_Path) # 得到该路径下所有的文件夹 for eachitem in listRs: full_path = os.path.join(file_Path, eachitem) # 获取完整的文件路径 if os.path.isdir(full_path): # 判断是否是文件夹 findFile(full_path) # 如果是一个文件夹 再次去递归 pass else: print(eachitem) pass pass else: return pass # 调用搜索文件夹对象 findFile('D:\\Study\\computer\\Python演示文档')