在本教程中,您將借助示例學(xué)習(xí)使用C語言編程編寫遞歸函數(shù)。
調(diào)用自身的函數(shù)稱為遞歸函數(shù)。并且,這種技術(shù)稱為遞歸。
void recurse() { ... .. ... recurse(); ... .. ... } int main() { ... .. ... recurse(); ... .. ... }
遞歸繼續(xù)進(jìn)行,直到滿足某些條件以防止遞歸為止。
為了防止無限遞歸,可以在一個(gè)分支進(jìn)行遞歸調(diào)用,而其他分支不進(jìn)行遞歸調(diào)用的情況下使用if ... else語句(或類似方法)。
#include <stdio.h> int sum(int n); int main() { int number, result; printf("請輸入一個(gè)正整數(shù): "); scanf("%d", &number); result = sum(number); printf("sum = %d", result); return 0; } int sum(int n) { if (n != 0) //sum()函數(shù)調(diào)用自身 return n + sum(n-1); else return n; }
輸出結(jié)果
請輸入一個(gè)正整數(shù):3 sum = 6
最初,從main()函數(shù)調(diào)用sum(),并將number作為參數(shù)傳遞。
假設(shè)sum()中的n初始值為3。 在下一個(gè)函數(shù)調(diào)用期間,將2傳遞給sum()函數(shù)。 此過程一直持續(xù)到n等于0。
當(dāng)n等于0時(shí),if條件失敗,執(zhí)行else部分,最終將整數(shù)和返回給main()函數(shù)。
遞歸使程序優(yōu)雅。但是,如果性能至關(guān)重要,請使用循環(huán)代替,因?yàn)檫f歸通常要慢得多。
話雖如此,遞歸是一個(gè)重要的概念。它經(jīng)常用于數(shù)據(jù)結(jié)構(gòu)和算法中。例如,在諸如樹遍歷之類的問題中通常使用遞歸。