【C&C++】递归函数

您所在的位置:网站首页 matlab函数递归调用计算阶乘 【C&C++】递归函数

【C&C++】递归函数

2023-07-22 19:27| 来源: 网络整理| 查看: 265

输入一个正整数,然后把该整数的每一位数字从高位到低位顺序输出,每个数字占一行。

例如:输入:123,程序输出:

1.1 2.2 3.3 对于将一个整数各位数字拆开的问题,由于该数字的位数未知,采用取余的方式也只能获得最低位,最高位很难获取。而这里要求先输出最高位,所以不能用循环实现。递归函数可以很好的解决这个问题。 递归函数 直接调用自己或通过其它函数间接调用自己的函数称为递归函数。递归函数适合于求解递归问题,所谓递归问题:是指一类比较复杂的问题,其问题的解决又依赖于类似问题的解决,只不过后者的复杂程度或规模较原来的问题更小,而且一旦将问题的复杂程度和规模化简到足够小时,问题的解法其实非常简单。

例如,计算某个自然数 n 的阶乘的公式写为:n!=n×(n−1)×(n−2)×…×2×1 这种阶乘的计算用如下循环结构来实现:

int factorial = 1; for (int counter = 1; counter 1) n! = 1                 (n = 1)

为了计算5!,要先计算出4!,要计算4!,又要先计算出3!,要计算3!,则要先计算2!,而2!又需要先计算1!。

从上述递归计算过程可以看到,一个复杂的问题,被一个规模更小、更简单的类似的问题替代了,经过逐步分解,最后得到了一个规模非常小、非常简单的、更容易解决的类似的问题,将该问题解决后,再逐层解决上一级问题,最后解决了较复杂的原始的问题。

递归性质

函数的递归具有以下两个性质:

函数调用时,调用程序在函数调用处暂时挂起,程序控制离开调用程序转入被调用函数执行,只有当被调用函数执行完后,才返回到调用程序的调用处继续向下执行,所以调用函数一定要在被调用函数执行完成后才能继续执行并结束。由于递归调用中调用函数和被调用函数可能是同一个函数,同一个函数的两次调用可以理解为函数的两个不同的副本;

一个函数被调用,系统会为该函数的这次执行分配存储空间,包括为该函数的形式参数和局部变量分配单元。因此,递归函数执行时,在某一时刻,计算机内可能有该递归函数的多个活动的同时存在,每个活动(即函数的每次调用执行)都有自己对应的存储空间,也就是说,函数的形式参数和局部变量,在函数的每次调用执行中都有不同的存储空间。

使用递归函数求阶乘的程序为:

#include using namespace std; // 递归函数 fac: 求 num 的阶乘 // 返回值:num 的阶乘 int fac(int num) { if (num > i; cout


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3