📄 巧用静态变量实现因数分解.txt
字号:
巧用静态变量实现因数分解[原创]
在前面,我曾经写过几个关于因数分解的代码。今日,又有灵感。说出来,大家指正。
在c语言中,静态变量的特点是:1)如果在子函数fun中定义静态变量a,则主调函数main第一次调用fun结束后,静态变量a超出作用域,但值会得到保留,下次调用fun函数时,变量a的值接着上次的继续计算。2)静态变量的赋值语句只会执行一次。3)整型静态变量默认值为0,字符类型静态变量默认值为'\0',其他类似。
所谓因数分解,如:100=2×2×5×5,实现此功能的函数如下:
int fun(int n)
{
static int i=2;//静态变量
if(i>n)
return;
if(n%i==0)
{
printf("%4d",i);
fun(n/i);//递归调用
}
else
{
i++;
fun(n);//递归调用
}
}
这个函数可以被其他函数调用,接受参数,然后输出其素因数。
后记:本来我想用这个代码来演示静态变量的用法,今天焦点的bgate指出了代码的一个严重问题,那就是在一次执行过程中多次调用这个函数来计算不同数据的因数分解结果,会出错。罪魁祸首正是静态变量。
在此向bgate表示深深的谢意!
修改于2005年7月24日晚
想起来一个解决的办法,虽然不是很完美,但还是可以解决问题的,修改后的代码如下:
int fun(int n)
{
static int i=2;
if(i>n)
{
i=2; //递归结束后恢复静态变量的值
return;
}
if(n%i==0)
{
printf("%4d",i);
fun(n/i);
}
else
{
i++;
fun(n);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -