实例二:使用递归实现strlen()函数的功能
与前面一题类似,我们得先将大型复杂的问题转化为与原问题相似规模较小问题
比如我们需要求得字符串为"abc",
1. int main() 2. { 3. char arr[] = "abc"; 4. int len = my_strlen(arr); 5. printf("%d\n", len); 6. return 0; 7. }
此时我们得明确在arr[]中abc存储为abc/0
这时候我们只需要按个从第一位进行判断,若为"/0",结束判断,不为则加一,最终判断结束输出即可;我们不难看出里面存在重复的判断和以为,以及加一,那我们便可以尝试进行实现,代码如下
1. int my_strlen(char* s) 2. { 3. if (*s == '\0')//约束条件 4. return 0; 5. else 6. return 1 + my_strlen(s + 1);//(s+1)为逐渐靠近约束条件,逐渐向后进行判断 7. }
这里由于博主画图能力不足,依旧借用大牛的图给大家讲解一下递归如何实现
红色线为递推过程,蓝色线为回归过程。递推过程时会不断向约束条件靠近,当满足约束条件时,便会return 0;从而实现回归过程
实例三:用递归实现求斐波那契(不考虑溢出)
首先我们的了解什么是斐波那契数,先给大家看一些斐波那契数
1 1 2 3 5 8 13....... .... ...
除最开始两个数,后面的数是前两的和。
如果需要我们求第n个斐波那契额数,我们就只需要知道n-1和n-2,知道n-1只需知道n-2和n-3,知道n-2只需知道n-3和n-4...... ......;
依次类推我们不难发现其中存在了大量的重复计算,那我们便可以尝试用递归思想进行解决。
我们发现要求一个数就得知道它前两个数,如果这个数太大,就像一棵倒着得数,程2得n次方增长,所以不考虑溢出,
1. 2. int Fib(int n) 3. { 4. if (n <= 2)//约束条件,满足条件是结束递推,开始回归 5. return 1; 6. else 7. return Fib(n - 1) + Fib(n - 2);//逐渐向约束条件靠近 8. }
以上就是博主对实例的讲解,若有不对或者有问题的宝宝可以在评论区留言或者私信博主