Day19-變數儲存類別和遞迴函式
那我們今天要教的是變數儲存類別
這邊提供3種修飾字,這些修飾字可以直接加在宣告變數型態前
第一個是register修飾字
register修飾字是CPU上的memory,CPU要存取register裡的資料遠比存取memory裡的資料快
範例:
#include<stdio.h>
#include<stdlib.h>
int main(void){
register int i;
for(i=0;i<1000;i++)
printf("%d\t",i);
system("pause");
}
印出:
第二個是static修飾字
static修飾字可以使變數只初始化一次
範例:
#include<stdio.h>
#include<stdlib.h>
int f(void);
int main(void){
int i;
for(i=1;i<5;i++)
printf("x=%d\n",f());
system("pause");
}
int f(void){
static int x=0;
return x++;
}
印出:
第三個是const修飾字
被const修飾的變數不能被改變,其編譯的程式會出現錯誤
範例:
#include<stdio.h>
#include<stdlib.h>
int main(void){
const int x=1;
x++;
system("pause");
}
編譯時
解釋:變數x不可直接被修改
那再來是遞迴函式
遞迴函式(recursive function)的定義:一個函式直接(在程式敘述內直接呼叫函式本身)或是間接(程式敘述內呼叫其他函式,在該函式內又呼叫原先的函式)的呼叫函式本身,稱為遞迴函式
那下面的範例是計算n階乘n!,可以利用n!=n*(n-1)的公式來計算
#include<stdio.h>
#include<stdlib.h>
int factorial(int);
int main(void){
int n;
printf("Input n:");
scanf("%d",&n);
printf("%d=%d",n,factorial(n));
system("pause");
}
int factorial(int n){
if(n==1)
return 1;
return n*factorial(n-1);
}
印出:
那今天就先到這裡拉
謝謝大家今天的閱讀!!