#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里面和外面有区别吗等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)