一 .递归的 基本思想 和完成递归所需要的 2个必要条件递归的基本思想把一个大的问题层层转化为与原问题形似的规模较小的问题。必要条件1.存在限制条件满足条件时不再继续递归。2.每次递归都会逐渐向限制条件靠近。这里用一个简单的例子来演示递归的 基本思想 和 2个必要条件。输入一个整形值按顺序输出数字。为了快速演示我用了一个简单的数字。首先我们的需求是获取每个单独的数字并将它们打印。然后 把4567这个数字拆解下因为个位最容易获取。所以我们要获取个位数打印然后去掉一位数让它成为3位数再获取新的个位数并打印再去掉一位数这样以此类推直到获取到最后一位数字。那么限制条件是什么呢一个数字最小就到 个位 所以限制条件是最小到个位n9。怎么让它慢慢满足条件呢相信大家已经知道了不就是让4567/10么。(这里只是举个简单的例子来说明递归的思想和限制条件还请大家嘴下留情)于是呢让这个函数在大于一位数的时候就递下去这样来慢慢满足限制条件剩下一位数的时候就直接打印开始归回来。最终得到1.print45672.print(45)63.print(4)54.print(5)//% u 打印无符号整形 void print(unsigned int n) { if (n 9) { print(n / 10); } printf(%u , n % 10); } int main() { unsigned int num 0; scanf(%u, num); print(num); return 0; }接下来画图说明蓝色线是归回来红色线是递出去二 . 用递归实现 strlen和上面一样我们需要搞清楚限制条件和怎么满足限制条件中止递归。需求是在不创建临时变量的前提下求 \0 之前字符的个数。这次的限制条件是很明显的——遇到 \0 就停止“ 递 ”开始 “ 归 ”。这次怎么满足这个限制条件呢首先我们需要明白当字符串传参时传的是首元素的地址通过 地址 1 指针移动到第二个元素。那么通过每次地址 1 找到 |0 。于是呢是非 \0 就返回个 1 遇到 \0 就返回个 0。//不创建临时变量计算字符串长度 //递归求解 int my_strlen(char* str) { if ( (*str) ! \0 ) { return my_strlen( (str 1) )1; } else { return 0; } } int main() { char arr[] 1234; int len my_strlen(arr); //传的是字符串首元素地址 printf(%d \n, len); return 0; }接下来画图说明蓝色线是归回来红色线是递出去截图太长了只能分开截图上传大家见谅。完整版截图在博客的最上方有需要的话请大家自便下载。好了到了文章的结尾希望这篇文章对你能有所帮助。