c题目16:写一个递归函数,计算N阶乘
每日小语
一生中,最光辉的一天并非功成名就的那一天,而是从悲叹与绝望中产生对人生挑战与勇敢迈向意志的那一天。——福楼拜
自己思考
这个小语呢,我目前还达不到,只是顺其自然,很多东西做起来很有动力,因为它让我感到热情澎湃。
写这篇文章也是,不管怎么说,突然有了一种想要让老师布置很多题目的冲动,也很想通过自己的双手把它们一一实现。
嗯,那我们开始吧。
这个也较为简单啦。
阶乘是什么?
阶乘是一个数学运算符,表示将一个正整数 n 及其之前所有的正整数相乘,记作 n!。阶乘的定义如下:
n! = n × (n - 1) × (n - 2) × ... × 2 × 1
例如,5! = 5 × 4 × 3 × 2 × 1 = 120。
在计算机编程中,阶乘通常可以通过循环或递归的方式来求解。使用循环时,可以从 1 或 n 开始迭代运算,依次相乘;而使用递归时,需要定义递归函数的基本情况和递归调用的方式。
#include <stdio.h>
int jiecheng(int n) {
if (n == 0)
return 0;
else if (n == 1)
return 1;
else
return jiecheng(n)*jiecheng(n-1);
}
int main() {
int n, result;
printf("输入一个数:");
scanf("%d", &n);
result = jiecheng(n);
printf("答案是 %d :%d\n", n, result);
return 0;
}
这个还是有问题。递归函数 jiecheng
中的基本情况修正为,当 n 为 0 或 1 时,返回 1 而不是 0。因为阶乘的定义中,0 的阶乘定义为 1。在递归调用中,使用 n * jiecheng(n - 1)
的方式计算 n 的阶乘。
为什么不是 jiecheng(n)*jiecheng(n-1);?
gpt没有告诉我
基本情况是当 n 为 0 或 1 时,直接返回 1。否则,递归调用 jiecheng(n - 1)
来计算 n-1 的阶乘,然后将结果与 n 相乘得到 n 的阶乘。
最后代码
#include <stdio.h>
int jiecheng(int n) {
if (n == 0 || n == 1)
return 1;//为0时也默认为1
else
return n*jiecheng(n-1);//为什么?
}
int main() {
int n, result;
printf("输入一个数:");
scanf("%d", &n);
result = jiecheng(n);
printf("答案是 %d :%d\n", n, result);
return 0;
}
那先这样吧,撒花花