导航:首页 > 编程知识 > 阶乘编程用递归怎么表示c语言

阶乘编程用递归怎么表示c语言

发布时间:2024-08-02 20:22:58

⑴ C语言怎么用递归法求阶乘

n的阶乘,就是从1开始乘到n,即1*2*3*...*(n-1)*n。
即n!=1*2*3*...*(n-1)*n。
而(n-1)!=1*2*3*...*(n-1)。
所以可以得出,n!=(n-1)!
*
n。
由这个概念,可以得出递归求阶乘函数fact的算法:
1
如果传入参数为0或1,返回1;
2
对于任意的n,返回n*fact(n-1)。
代码如下:
int fact(int n)
{
if(n == 0 || n == 1) return 1;
return n*(fact(n-1));
}

⑵ c璇瑷鐨勬眰n鐨勯樁涔樼殑绋嬪簭浠g爜

鐢ㄩ掑綊娉曟眰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!! ");

return -1;

}

n = atoi(argv[1]);

printf("%d! = %ld ",n,factorial(n));

return 0;

}

涔犻樼ず渚

棰樼洰

棰樼洰鎻忚堪锛

杈撳叆涓涓姝f暣鏁癗锛岃緭鍑篘鐨勯樁涔樸

杈撳叆锛

姝f暣鏁癗(0<=N<=1000)

杈撳嚭锛

杈撳叆鍙鑳藉寘鎷澶氱粍鏁版嵁锛屽逛簬姣忎竴缁勮緭鍏ユ暟鎹锛岃緭鍑篘鐨勯樁涔

鏍蜂緥杈撳叆锛

4

5

15

鏍蜂緥杈撳嚭锛

24

120

1307674368000

AC浠g爜

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#define MAX 3000

//瀛樺偍姣忔¢樁涔樿繍绠楃殑缁撴灉

int str[MAX];

void calculateFactorial(int n);

int main()

{

int n;

while (scanf("%d", &n) != EOF) {

if(n == 0) {

printf("1 ");

} else {

calculateFactorial(n);

}

}

return 0;

}

void calculateFactorial(int n)

{

int i, j, temp, c, len;

memset(str, 0, sizeof(str));

str[1] = 1;

for (i = 2, len = 1; i <= n; i ++) { //寰鐜涓2,3,..n鐩镐箻

for (j = 1, c = 0; j <= len; j ++) { //str鏁扮粍浠h〃涓涓鏁帮紝妯℃嫙涓巌鐩镐箻

temp = str[j] * i + c;

str[j] = temp % 10;

c = temp / 10;

}

while(c > 0)

{

str[j ++] = c % 10;

c /= 10;

}

len = j - 1;

}

for (i = len; i >= 1; i --) {

printf("%d", str[i]);

}

printf(" ");

}

/**************************************************************

Problem: 1076

User: wangzhengyi

Language: C

Result: Accepted

Time:2150 ms

Memory:916 kb

⑶ C语言中如何编程计算阶乘

常见的有两种:

递归版本

intFac(intn){
if(n==0)return1;
returnn*Fac(n-1);
}

还有一种是循环版:

intans=1;
for(inti=1;i<=n;i++)ans*=i;

测试方法:

#include<stdio.h>

intFac(intn){
if(n==0)return1;
returnn*Fac(n-1);
}

intmain(){
intn;
while(scanf("%d",&n)!=EOF){
intans=1;
for(inti=1;i<=n;i++)ans*=i;
printf("%d%d ",ans,Fac(n));
}
return0;
}

有个值得注意的地方内:阶乘时,数增大容的很快,在n达到13时就会超过int的范围,此时可以用long long或是 __int64来存储更高精度的值,如果还想存储更高位的,需要用数组来模拟大数相乘。

阅读全文

与阶乘编程用递归怎么表示c语言相关的资料

热点内容
平时用什么app看nba 浏览:503
win10想以管理员身份运行bat文件 浏览:85
合并单元格中的其他数据如何排序 浏览:331
电脑窗口程序在哪 浏览:281
前女友把我微信删了又加什么意思 浏览:655
win10不识别无线xboxone手柄 浏览:403
汽车之家app怎么看成交价 浏览:908
abc文件破解密码 浏览:516
怎么登录米家app账号 浏览:165
兆欧表多少转读数据 浏览:414
多媒体网络通讯 浏览:747
文件上的表填不了内容该怎么办 浏览:899
弟弟迷上网络小说怎么办 浏览:766
网络上有人想访问我的地址怎么办 浏览:730
linux解压zip乱码 浏览:839
看直播数据用哪个平台最好 浏览:730
win10芯片驱动程序版本 浏览:763
如何给word添加公式编辑器 浏览:666
iphone桌面文件夹怎样合并 浏览:919
要我苹果账号密码忘记了怎么办 浏览:578

友情链接