前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C语言练习之求n的阶乘

C语言练习之求n的阶乘

作者头像
摘星
发布2023-04-28 09:57:16
8740
发布2023-04-28 09:57:16
举报
文章被收录于专栏:C/C++学习

前言

运用最近学习的C语言知识,使用递归和非递归两种方法分别实现求n的阶乘(不考虑溢出的问题)

一、原理及思路

原理:

求n的阶乘

n! = n*(n-1)*(n-2)*(n-3)······2*1

特殊的,当n = 0时,n! = 1。

思路:

由原理我们可以得到一个公式:

gif.latex?f%28n%29%3D%5Cleft%5C%7B%5Cbegin%7Bmatrix%7D%201%20%26%20n%3D0%2C1%20%26%20%5C%5C%20n*f%28n-1%29%26%20n%3D2%2C3%2C4%2C...%26%20%5Cend%7Bmatrix%7D%5Cright.
gif.latex?f%28n%29%3D%5Cleft%5C%7B%5Cbegin%7Bmatrix%7D%201%20%26%20n%3D0%2C1%20%26%20%5C%5C%20n*f%28n-1%29%26%20n%3D2%2C3%2C4%2C...%26%20%5Cend%7Bmatrix%7D%5Cright.

以5!为例,它的递推过程如下

f(5) -->5*f(4)

               f(4)-->4*f(3)

                            f(3)-->3*f(2)

                                          f(2)-->2*f(1)

                                                        f(1)=1

将f(1)的值回代到上一步,以此回推,最终就能得到原式的结果。

二、源代码以及运行截图

为了方便大家的交流和学习,我将程序源代码和运行截图放置在下方。

非递归:

源代码:

代码语言:javascript
复制
#include<stdio.h>
int main()
{
	int n = 1;
	int m = 1;
	int input = 0;
	printf("请输入要计算阶乘的数:>");
	scanf("%d", &input);
	if (input < 0)
	{
		printf("输入错误!\n");
	}
	else if (input != 0)
	{
		for (n = 1; n <= input; n++)
		{
			m *= n;
		}
	}
	printf("这个数的阶乘为%d\n", m);
	return 0;
}

运行截图:

33117fe4ae304d18b081751d95575cf1.png
33117fe4ae304d18b081751d95575cf1.png

递归:

源代码:

代码语言:javascript
复制
#include<stdio.h>
int Fct(int input)
{
	if (input < 0)
	{
		printf("输入错误!\n");
		return -1;
	}
	else if (input == 0)
	{
		return 1;
	}
	else
	{
		return input*Fct(input - 1);
	}
}
int main()
{
	int input = 0;
	printf("请输入要计算阶乘的数:>");
	scanf("%d", &input);
	printf("这个数的阶乘为%d\n", Fct(input));
	return 0;
}

运行截图:

5927632a3af04405924ff825badb4cc6.png
5927632a3af04405924ff825badb4cc6.png


总结

以上就是今天要讲的内容,本文简单的介绍了用C语言中的循环和递归两种思路实现n的阶乘的求解,还进一步展示了代码的运行结果验证了作者的思路。

本文的作者也只是一个正在学习C语言等编程知识的萌新,若这篇文章中有哪些不正确的内容,请在评论区向作者指出(也可以私信作者),欢迎大佬们指点,也欢迎其他正在学习C语言的萌新和作者进行交流。

最后,如果本篇文章对你有所启发的话,也希望可以支持支持作者,后续作者也会定期更新学习记录。谢谢大家!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-11-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 一、原理及思路
    • 原理:
      • 思路:
      • 二、源代码以及运行截图
        • 非递归:
          • 递归:
          • 总结
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档