递归调用函数专题-C语言0| 前言本小节主要学习一种自己嵌套自己的函数调用方法——递归调用
1| 示例例如,在给定整数n的情况下,计算并输入阶乘n!的程序 。
阶乘函数的定义:
int factorial(int n){int product;for (int i = 1; i <= n; i++){product = product * i;}return product; }
这个函数思想:使用了一个循环将1到n的数值依次相乘进行计算,并将得到的乘积作为结果返回 。
用for循环解决问题
- 一个循环从1开始
- 一直不断相乘,直到乘以n为止
int factorial(int n) {if (n==1){return 1;}return factorial(n - 1) * n; }
其实换一个角度在思考这个问题,n!可以看成 n*(n-1)!的乘积,而(n-1)!又可以看作是(n-1)*(n-2)!的乘积….. 以此类推到 2 * 1,代码是不是更简洁一点呢?其实,像这种在一个函数的定义中调用自身的情况被称为–递归调用
(1)头递归【c语言圆的面积编程 c语言阶乘函数怎么写】例如定义的函数:
int factorial(int n){if (n == 1){return 1;}return factorial(n-1) * n;}
如果传入给函数factorial() 的n是5:factorial(5) = 5 * factorial (4)像这种返回一个包含本身函数的递归调用的这种递归设计,被称为投递归 。
= 5 * 4 * factorial (3)
= 5 * 4 * 3 * factorial(2)
= 5 * 4 * 3 * 2 * factorial(1)
= 5 * 4 * 3 * 2 * 1
(2)尾递归与头递归相对应的就是尾递归,尾递归的思想实现如下:
int factorial(int n, int product){if (n == 0){return product;}product = product * n;return factorial(n-1, product); }
同样也拿 n=5, 来了解一下程序的实现细节: factorial (5,1)~ factorial(n, product * n) = factorial(4,1*5) = factorial(4, 5) = factorial(3, 5*4) = factorial(3, 20) = factorial(2, 20*3) = factorial(2, 60) = factorial(1, 60*2) = factorial(1, 120)] = factorial(0, 120*1) = factorial(0, 120) = 120~ product
小伙伴没有发现,尾递归的实现中,每一次函数递归调用都会将一个阶段性的结果传递到下一次被调用的函数中,当最终的一般终止条件满足时,把最终结果直接返回 。推荐阅读
- python教程 疯狂的python建议怎么样
- 说话技巧和应变能力的书 看什么书可以提高语言表达能力?
- 今年夏天为何没有出现大面积高温呢
- 质量效应传奇版有中文吗 质量效应传奇版语言选项一览
- 足球经理2021语言强化怎么看 足球经理2021语言强化训练详解
- kindle退出中国是真的吗 kindle大面积缺货
- 游戏王大师决斗有中文吗 游戏语言介绍
- 圣女战旗社交的语言声望及经费一览 各角色声望是多少
- 伊苏9steam中文有吗 伊苏9steam语言介绍
- 流放者柯南设置中文不成功解决方法 语言设置不生效怎么办