递归函数实例讲解(下)

简介: 递归函数实例讲解(下)

实例二:使用递归实现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. }


以上就是博主对实例的讲解,若有不对或者有问题的宝宝可以在评论区留言或者私信博主

相关文章
|
7月前
|
编译器
【函数和函数递归】
【函数和函数递归】
37 0
|
7月前
|
算法
函数递归(详细解读)(上)
函数递归(详细解读)(上)
|
7月前
函数递归(详细解读)(下)
函数递归(详细解读)(下)
|
10月前
递归函数实例讲解(上)
递归函数实例讲解(上)
递归函数实例讲解(上)
|
10月前
|
算法 C语言
函数的递归
当我们在生活中遇到一个复杂问题时,我们会想方设法将其解决,这时我们会有很多种方法,我们可以将问题一步一步顺序化,也可以使用逆向思维将其巧妙化解。C语言中就给我们提供了一种将问题大事化小思想——递归。
53 0
|
存储 算法 C语言
递归算法实例应用(五)
递归算法实例应用(五):(POJ 2787)算24
4133 0
|
算法
递归算法实例应用(四)
递归算法实例应用(四):(POJ 4017)爬楼梯、(POJ 1664)放苹果
4052 0
|
算法 C++
递归算法实例应用(三)
递归算法实例应用(三):(POJ4132)四则运算表达式求值问题
4014 0
递归算法实例应用(三)
|
算法 C++
递归算法实例应用(二)
递归算法实例应用(二):Polish Expression问题
3971 0
|
机器学习/深度学习 算法
递归算法实例应用(一)
递归算法实例应用(一):简单Hanoi 问题、N Queens问题。
3982 0
递归算法实例应用(一)