?? 巧用靜態變量實現因數分解.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 + -