函式的巢狀呼叫
C語言的函式定義是互相平行的、獨立的,也就是說,在定義函式時,一個函式內不能再定義另一個函式,也就是不能巢狀定義,但是可以巢狀呼叫函式,也就是說,在呼叫一個函式的過程中,又呼叫另一個函式
如上執行過程:
- 執行 main 函式
- 遇到函式呼叫的語句,呼叫函式 a ,流程轉到 a 函式
- 執行 a 函式
- 遇到函式呼叫的語句,呼叫函式 b ,流程轉到 b 函式
- 執行 b 函式
- b 函式執行完畢,返回 a 函式,繼續執行 a 函式
- a 函式執行完畢,返回 main 函式,繼續執行 main 函式
- main 函式執行完畢,程式結束
函式的遞迴呼叫
在呼叫一個函式的過程中又出現直接或間接的呼叫該函式本身,稱為函式的遞迴呼叫
C語言的特點之一就在於允許函式的遞迴呼叫
//f(x) = f(x - 1) + 2
#include <stdio.h>
int func(int index)
{
if (1 == index)//遞迴結束條件
return 10;
return func(index - 1) + 2;//開始遞迴
}
int main(void)
{
printf("%d\n", func(5));
return 0;
}
執行結果:
例:用遞迴法求 n!
//f(n) = f(n - 1) * n
#include <stdio.h>
long long func(int n)
{
if ((1 == n) || (0 == n))//遞迴結束條件
return 1;
return func(n - 1) * n;//開始遞迴
}
int main(void)
{
int n;
scanf("%d", &n);
printf("%lld\n", func(n));
return 0;
}
在VS編譯器內會報C4996錯誤,解決見下文:
C4996 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. - EricsT - 部落格園 (cnblogs.com)
執行結果: