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
相关产品推荐
相关产品推荐

