用函式實現模組化程式設計三

EricsT發表於2024-11-12

函式的巢狀呼叫

C語言的函式定義是互相平行的、獨立的,也就是說,在定義函式時,一個函式內不能再定義另一個函式,也就是不能巢狀定義,但是可以巢狀呼叫函式,也就是說,在呼叫一個函式的過程中,又呼叫另一個函式

用函式實現模組化程式設計三

如上執行過程:

  1. 執行 main 函式
  2. 遇到函式呼叫的語句,呼叫函式 a ,流程轉到 a 函式
  3. 執行 a 函式
  4. 遇到函式呼叫的語句,呼叫函式 b ,流程轉到 b 函式
  5. 執行 b 函式
  6. b 函式執行完畢,返回 a 函式,繼續執行 a 函式
  7. a 函式執行完畢,返回 main 函式,繼續執行 main 函式
  8. 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)

執行結果:

用函式實現模組化程式設計三

相關文章