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