You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言递归函数中return n*multiplyNumbers(n-1);的作用及执行逻辑

#include<stdio.h>

long int multiplyNumbers(int n);

int main() 
{
    int n;

    printf("Enter a positive integer: ");
    scanf("%d",&n);
    printf("Factorial of %d = %ld", n, multiplyNumbers(n));

    return 0;
}

long int multiplyNumbers(int n)
{
    if (n>=1)
        return n*multiplyNumbers(n-1);
    else
        return 1;
}

以下是一段实现阶乘计算的C语言程序,请阐述其中语句return n*multiplyNumbers(n-1);的功能目的,以及它的具体执行过程是什么?


功能目的

这句是实现阶乘计算的核心递归逻辑,完全贴合阶乘的数学定义:n! = n × (n-1)!。它的作用是把当前输入的整数n,和n-1的阶乘结果相乘,最终得到n的阶乘值。

具体执行过程

我们以输入n=3为例,一步步拆解执行流程:

  • 首次调用multiplyNumbers(3),因为3>=1,触发语句return 3 * multiplyNumbers(2),此时程序暂停当前计算,转而调用multiplyNumbers(2)
  • 进入multiplyNumbers(2),2>=1,触发return 2 * multiplyNumbers(1),再次暂停计算,调用multiplyNumbers(1)
  • 进入multiplyNumbers(1),1>=1,触发return 1 * multiplyNumbers(0),继续暂停计算,调用multiplyNumbers(0)
  • 进入multiplyNumbers(0),因为0<1,进入else分支,直接返回1
  • 开始回溯计算:
    • multiplyNumbers(0)返回的1代入上一层,得到1*1=1(即1!的结果),返回给multiplyNumbers(2)的调用处
    • 把1代入multiplyNumbers(2)的计算,得到2*1=2(即2!的结果),返回给multiplyNumbers(3)的调用处
    • 最后把2代入multiplyNumbers(3)的计算,得到3*2=6(即3!的结果),最终返回给main函数用于输出

内容的提问来源于stack exchange,提问作者Uuuuuuu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 16:07:33