河北制作网站模板建站公司,wordpress 调用参数,程序开发步骤,做网站用的图片怎样压缩目录
函数和类型
阶乘
█递归函数调用 函数中可以调用和该函数自身完全相同的函数#xff0c;这样的调用方式称为递归函数调用#xff0c;下面我们就来学习相关的基础知识。 函数和类型
所谓递归#xff08;recursive#xff09;#xff0c;就是将自己包含在内#x…目录
函数和类型
阶乘
█递归函数调用 函数中可以调用和该函数自身完全相同的函数这样的调用方式称为递归函数调用下面我们就来学习相关的基础知识。 函数和类型
所谓递归recursive就是将自己包含在内或者用自己来定义自己。
我们用下面的图来说明ps引用知乎是花花吖图片
显示器里面套着一个又一个显示器
通过采用递归的思考方式从1开始无限延续的自然数1、2、3……就可以像下面这样使用有限的方式定义出来
█自然数的定义 a 1是自然数 b 某个自然数后面的整数也是自然数 通过使用递归定义无限存在的自然数就可以通过两个语句定义出来不仅仅是定义通过有效利用递归还可以使程序更加整洁。 阶乘
递归的另一个例子就是求非负整数的阶乘。对于非负整数n的阶乘可以采用如下方式进行定义
█阶乘n的定义n为非负整数 a 0 1 b 若n 0则n n*(n-1)! 例如5的阶乘5可以通过5*4求得而4的阶乘4可以通过4*3求得一直到1 1*0根据定义0 1
我们用程序来实现如下
#includestdio.h/*返回阶乘的值*/
int factorial(int n)
{if(n 0)return n * factorial(n - 1);elsereturn 1;
}
int main()
{int num;printf(请输入一个整数);scanf(%d, num);printf(%d的阶乘是%d\n, num, factorial(num));return 0;
}
只要形参接收的值大于0函数factorical就会返回到n * factorial(n - 1)否则返回到1.
看起来虽然很简单但在程序执行时是十分复杂的下面让我们来看看是如何执行的 █递归函数调用
我们以求3的阶乘为例看看函数factorical求阶乘的流程 a 通过factorical3调用函数函数factorical因此形参n会被传入3所以该函数返回3*factorical2但是要知道函数factorical2的值就必须以2为参数再次调用函数函数factorical。 b 被调用的函数函数factorical将2传入形参n中该函数返回2*factorical(1)想知道函数factorical1的值就必须以1为参数再次调用函数factorical c 被调用的函数factorical将1传入形参n中为了进行1*factorical0的运算调用函数函数factorical0 d 因为形参n接受到的值为0所以函数factorical返回1 大家参照下面的流程图来对应上面每一个步骤红色箭头是参数黄色箭头是返回值 接下来是递归大家可以从下面中仔细考虑下体现出的递归意义 c 收到返回值1的函数factorical返回1*factorical0即1*1 b 收到返回值2的函数factorical返回2*factorical1即2*1 d 收到返回值3的函数factorical返回3*factorical2即3*2 为了求得n-1的阶乘函数factorical调用函数factorical像这样的函数调用称为递归函数调用 递归函数调用与其说时调用函数本身倒不如理解为调用和该函数同样的函数更加自然如果是调用函数本身则会一直调用下去进入死循环。 如果待处理的问题、函数或者数据结构已经具有递归定义就可以使用递归算法。使用递归的方式求阶乘是为了大家能够更好地理解但并不合适。