递归函数实例讲解(下)

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

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


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

相关文章
|
8月前
|
C++
C++程序中的函数递归调用
C++程序中的函数递归调用
101 1
|
5月前
|
缓存 算法 Java
递归函数
递归函数
90 1
|
7月前
函数\递归函数求阶乘
函数\递归函数求阶乘
75 3
|
8月前
|
算法
递归函数实现素数判断
该文介绍了素数判断的递归实现,尽管递归算法在判断素数上并不高效,时间复杂度和空间复杂度均为O(N),但作为学习和理解递归的一种方式,仍有其价值。文章强调在实际应用中应选择更高效的方法。递归思路基于试除法,对于大于1的整数,如果只能被1和自身整除,则为素数。递归函数通过不断试除2到根号下该数之间的数来判断,同时注意到偶数不是素数。文中给出了非递归和递归的试除法代码示例。
143 2
|
8月前
|
算法 Serverless Python
函数的递归调用
在编程中,递归是一种非常强大的技术,它允许函数直接或间接地调用自身。递归调用使得某些问题的解决变得简单而优雅,尤其是那些具有自然分治结构的问题。本文将介绍函数的递归调用概念,并通过示例代码展示其应用。
64 1
|
机器学习/深度学习
递归函数问题
递归函数问题
72 0
|
算法 C++
递归算法实例应用(三)
递归算法实例应用(三):(POJ4132)四则运算表达式求值问题
4066 0
递归算法实例应用(三)
|
机器学习/深度学习 算法
递归算法实例应用(一)
递归算法实例应用(一):简单Hanoi 问题、N Queens问题。
4074 0
递归算法实例应用(一)
|
存储 算法 C语言
递归算法实例应用(五)
递归算法实例应用(五):(POJ 2787)算24
4171 0