编一函数过程fact用于计算阶乘,再编写程序调用该函数过程,求1~10的阶乘之和

编一函数过程fact用于计算阶乘,再编写程序调用该函数过程,求1~10的阶乘之和,第1张

#include <stdioh>

int fac(int n);

int fac(int n)

{

if(n<=1)

return 1;

else

return nfac(n-1);

}

main()

{

int i,sum=0;

for(i=1;i<=10;i++)

{

sum=sum+fac(i);

}

printf("%d\n",sum);

}

你这个程序算是个递归程序吧。f()函数总共执行三次。程序一开始执行,由打印函数调用f()函数,由于变量fact,i被定义为静态变量,因此,具有全局作用域。第一次调用f()函数时形参num=3,run=0,所以接下来的if语句判断成功,fact赋值为1,i也为1,再执行fact=facti=1

++i是前自增,也就是先被加1,此时i=2,++i<=num即为2<=3,成立,执行f(num,i),此时形参num=3,run=2,因此不进入第一个if()语句,直接执行fact=i,fact=12=2,再执行第二个if()语句,++i<=sum,即为3<=3,判断成功,执行f(num,i),第三次调用该函数,此时形参num=3,i=3,第一个if()语句不满足,执行fact=I,fact=23=6,第二个if()语句也不满足,因此执行return 返回6,所以结果就为6不知道有没有把你讲晕 呵呵~

有区别,放在

while

里面

while

的每次循环

都是将

fact

初始化为

1

如果放在

外面,

while

的每次循环

都是

在上一次

fact值的基础上

做乘积的

这个应该是求n!吧,用到的是递归的知识,当程序运行到fact(n-1)时自调用fact(n)函数,把n-1传给n,直到递归碰到n==0时退出。你看一下C++中有关递归调用的知识就能清楚。

1 x=i改为x=xi

2 item = 1 / fact(n)改为item = 1 / fact(n+1)

3 Loop While item >= 001改为Loop While item >= 1e-8

对于函数fib,时间复杂度 t(n)=1+t(n-1),故为 Θ(n)。

对于函数cnm,你这里n>m,调用了fib(n),fib(m),fib(n-m),外加一次除法和一次乘法运算,故其时间复杂度为 o(n)。

阶乘的英文是factorial。

以上就是关于编一函数过程fact用于计算阶乘,再编写程序调用该函数过程,求1~10的阶乘之和全部的内容,包括:编一函数过程fact用于计算阶乘,再编写程序调用该函数过程,求1~10的阶乘之和、请帮我分析一下这个程序,说一下结果的由来、那个算奇数的乘积的C语言程序,fact=1放在while里面和外面有区别吗等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9782880.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存