c语言用递归函数求n的阶乘(c语言的求n的阶乘的程序代码)
本文目录
c语言的求n的阶乘的程序代码
用递归法求N的阶乘
程序调用自身称为递归( recursion).它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解.
递归的能力在于用有限的语句来定义对象的无限集合。
一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。
#include 《stdio.h》
#include 《string.h》
#include 《stdlib.h》
long factorial(int n)
{
if(n == 1)
return 1;
else
return n*factorial(n-1);
}
int main(int argc,char *argv)
{
int n = 0;
if(argc != 2)
{
printf("input error,exit!!\n");
return -1;
}
n = atoi(argv);
printf("%d! = %ld\n",n,factorial(n));
return 0;
}
习题示例
题目
题目描述:
输入一个正整数N,输出N的阶乘。
输入:
正整数N(0《=N《=1000)
输出:
输入可能包括多组数据,对于每一组输入数据,输出N的阶乘
样例输入:
4
5
15
样例输出:
24
120
1307674368000
AC代码
#include 《stdio.h》
#include 《stdlib.h》
#include 《string.h》
#define MAX 3000
//存储每次阶乘运算的结果
int str;
void calculateFactorial(int n);
int main()
{
int n;
while (scanf("%d", &n) != EOF) {
if(n == 0) {
printf("1\n");
} else {
calculateFactorial(n);
}
}
return 0;
}
void calculateFactorial(int n)
{
int i, j, temp, c, len;
memset(str, 0, sizeof(str));
str = 1;
for (i = 2, len = 1; i 《= n; i ++) { //循环与2,3,..n相乘
for (j = 1, c = 0; j 《= len; j ++) { //str数组代表一个数,模拟与i相乘
temp = str * i + c;
str = temp % 10;
c = temp / 10;
}
while(c 》 0)
{
str = c % 10;
c /= 10;
}
len = j - 1;
}
for (i = len; i 》= 1; i --) {
printf("%d", str);
}
printf("\n");
}
/**************************************************************
Problem: 1076
User: wangzhengyi
Language: C
Result: Accepted
Time:2150 ms
Memory:916 kb
C语言用函数思想求n的阶乘
#include 《stdio.h》
// 声明递归函数 factorial,用于计算 n 的阶乘
int factorial(int n);
int main() {
int n;
printf("请输入一个非负整数 n: ");
scanf("%d", &n);
if (n 《 0) {
printf("输入错误!\n");
return -1;
}
printf("%d 的阶乘为 %d\n", n, factorial(n));
return 0;
}
// 定义递归函数 factorial,用于计算 n 的阶乘
int factorial(int n) {
if (n == 0 || n == 1) { // 边界条件
return 1;
} else {
return n * factorial(n-1); // 递归调用
}
}
用c语言,利用递归函数求n!,由键盘输入任一整数,求n!
首先明确题目要求:递归函数,求n!
递归函数的含义:
编程语言中,函数Func(Type a,……)直接或间接调用函数本身,则该函数称为递归函数。
n!表示阶乘函数,即1*2*3*……*n
下面给出代码:(C语言实现 )
比较简单的尾递归实现:
#include《stdio.h》long digui(int n); //递归函数声明int main(){int n; scanf("%d",&n);printf("the result is %ld",digui(n)); //打印出递归值return 0;}long digui(int n) //递归函数部分{if(n》1) return n*digui(n-1); //调用递归,让n与n-1相乘,直到n《1时return 1; //n《1时,返回1,实现 n*(n-1)*(n-2)*……*3*2*1}
c语言用 递归调用函数 的方法求n的阶乘,要具体解释一下,具体到每一行
手机打的,排版不周,已调试。#includey(x){if(x=0)return1;elesreturnx*y(x-1);}voidmain(){intn,result;printf("请输入n的值:");scanf("%d",&n);result=y(n);printf("%d!=%d\n",n,result);}
c语言递归求阶乘
举例:用递归方法求n;
#include《stdio.h》
int main()
{
int n;
int y;
printf("input a integer number:");
scanf("%d",&n);
y=fac(n);
printf("%d!=%d\n",n,y);
return 0;
}
int fac(int n)
{
int f;
if(n《0)
printf("n《0,data error!");
else if(n==0||n==1)
f=1;
else
f=fac(n-1)*n;
return(f);
}
扩展资料:
return用法:
return返回一个数值的意思就是把return《表达式》后面表达式的值返回给调用他的函数。举个例子:
int sum(int i,int j)
{
return i+j;
printf("这个语句不会被执行,因为该子函数执行到上面的return语句就无条件结束了");
}
main()
{
int a=10,b=11,c;
c=sum(a,b);
printf("%d",c);
}
程序的输出为:
21
这个21从何而来呢main函数调用sum(a,b)函数时将a的值赋给i,b的值赋给j,上面说了return i+j;会计算i+j的值也就是结果等于21,并将21带回给调用它的函数,即c=sum(a,b);相当于c=21,这个21就是由sum(a,b)中的return反回来的。
更多文章:
重装系统win7步骤和详细教程(怎样重装系统win7 电脑重装系统步骤)
2024年6月21日 00:59
unidrv hlp下载(安装打印机提示安装程序无法复制文件unidrv hlp)
2024年5月19日 12:58
疯狂外星人下载(《疯狂外星人》黄渤的欢欢为什么戴上外星人的发带后也变成了会说话的聪明外星人)
2024年6月8日 08:04
问下大家 美女都用的啥手机!?男人的手机屏幕是美女说明什么心理
2024年7月24日 11:08
多玩英雄联盟盒子app(电脑进英雄联盟 显示分辨率不支持调了很多次都没用!好像提示说要进游戏里面把游戏里的调)
2024年5月6日 07:24
求问:浩方集团提供品牌出海加速孵化服务,他们的亚马逊运营风控体系做得咋样?风控前景和待遇(风控的工资为什么不高)
2024年6月1日 21:51
罗技m505驱动(求罗技m505鼠标驱动,哪里有罗技m505的驱动啊)
2024年6月27日 23:23
wifi已连接不可上网(无线网络连接成功但显示不可上网是怎么回事)
2024年5月25日 03:58
split view(ipad Split View功能怎么打开)
2024年7月15日 10:56
iphone7图片(iPhone 7在安卓手机中属于什么级别)
2024年7月15日 08:24