0
点赞
收藏
分享

微信扫一扫

(篇四)C语言静态变量法,求各阶乘,的和


文章目录

  • ​​静态变量求阶乘相加​​
  • ​​普通方法求阶乘相加​​


本篇仍然是C语言的相关知识,主要分析了用C语言的静态变量来求各个阶乘的和;当然也包括了阶乘和静态变量的相关分析

静态变量求阶乘相加

1、阶乘的概念:

2、静态变量的概念:

From“科普中国”
静态变量(Static Variable)在计算机编程领域指在程序执行前系统就为之静态分配(也即在运行时中不再改变分配情况)存储空间的一类变量。与之相对应的是在运行时只暂时存在的自动变量(即局部变量)与以动态分配方式获取存储空间的一些对象,其中自动变量的存储空间在调用栈上分配与释放。

3、静态变量大白话:
(1)说白了静态变量就是作用域无法影响其值的变量,比如在C语言的函数中,形参都是临时变量,函数调用结束后,临时变量的内存空间就会被释放掉;
(2)可是静态变量就不会,它会一直存在,知道整个程序运行结束;
(3)如果你在函数中定义一个静态变量,该静态变量的内存空间也不会随着函数调用结束而消失;
(4)静态变量只能在定义它们的函数中引用,跳出该函数后其值不变,下一次再调用该函数时,其值仍为上次结束时的值
(5)在C语言中,静态变量是由static存储类声明的变量

4、题:
求1到n的阶乘相加

5、分析用静态变量求阶乘:
(1)原本求阶乘就是需要两个变量,一个用来保存每一项阶乘的值,一个用来保存各阶乘的和;
(2)求每一项阶乘中,又需要让前一项阶乘的值保持不变;所以这时候就可以用静态变量来处理;
(3)比如用s来做每一项的阶乘,n2表示该阶乘的下一项数字,则求阶乘的函数中应该用​​​s= s*n2;​​来求下一项的阶乘;

//求阶乘 
long factor(int n2)
{
static long s= 1;
//定义静态变量s:静态变量只能在定义它们的函数中引用,跳出该函数后其值不变,下一次再调用该函数时***其值仍为上次结束时的值***

s= s*n2;
return s;
}

(4)然后每次返回s的值,加到求和变量sum中,在循环条件下,n2的值会加1,一直加到我们指定的那个值才停,循环结束,求和完成

//求阶乘的和 
long sum(int n1)
{
int i;
long sum= 0;
for(i=1; i<=n1; i++)
{
sum += factor(i);
}
return sum;
}

6、完整参考代码:

#include <stdio.h>
long factor(int n2); //函数的声明,一个用静态变量求阶乘,一个用来求各个阶乘的和
long sum(int n1);

void main()
{
int n;
long s;
printf("请输入n的值:");
scanf("%d",&n);
s= sum(n);
printf("结果为:%d",s);
}

//求阶乘的和
long sum(int n1)
{
int i;
long sum= 0;
for(i=1; i<=n1; i++)
{
sum += factor(i);
}
return sum;
}

//求阶乘
long factor(int n2)
{
static long s= 1;
//定义静态变量s:静态变量只能在定义它们的函数中引用,跳出该函数后其值不变,下一次再调用该函数时***其值仍为上次结束时的值***

s= s*n2;
return s;
}

6、参考结果:

(篇四)C语言静态变量法,求各阶乘,的和_经验分享_02


这里的n值是6,算的就是1!+2!+3!+4!+5!+6!
总要算6次阶乘,再加6次
因为有了静态变量,我们就直接使用上一项阶乘的值,而不用重新定义变量,减少了循环,降低了时间复杂度

普通方法求阶乘相加

1、分析:
普通方法就需要用到循环,来求每一项的阶乘;

//求阶乘
long factor(int n2)
{
int i;
long s= 1;
for(i=1; i<=n2; i++)
{
s= s*i;
}
return s;
}

因为它没有一个变量来保存上一项阶乘的值

2、参考代码:

#include <stdio.h>
long factor(int n2);
long sum(int n1);

void main()
{
int n;
long s;
printf("请输入n的值:");
scanf("%d",&n);
s= sum(n);
printf("结果为:%d",s);
}

//求阶乘的和
long sum(int n1)
{
int i;
long sum= 0;
for(i=1; i<=n1; i++)
{
sum += factor(i);
}
return sum;
}

//求阶乘
long factor(int n2)
{
int i;
long s= 1;
for(i=1; i<=n2; i++)
{
s= s*i;
}
return s;
}

3、参考结果:

(篇四)C语言静态变量法,求各阶乘,的和_算法_03


举报

相关推荐

0 条评论