遞歸指的是在函數(shù)的定義中使用函數(shù)自身的方法。
舉個(gè)例子:從前有座山,山里有座廟,廟里有個(gè)老和尚,正在給小和尚講故事呢!故事是什么呢?"從前有座山,山里有座廟,廟里有個(gè)老和尚,正在給小和尚講故事呢!故事是什么呢?'從前有座山,山里有座廟,廟里有個(gè)老和尚,正在給小和尚講故事呢!故事是什么呢?……'"
語(yǔ)法格式如下:
voidrecursion()
{ statements; ... ... ... recursion(); /* 函數(shù)調(diào)用自身 */ ... ... ...
}
intmain()
{ recursion();
}
流程圖:
C語(yǔ)言支持遞歸,即一個(gè)函數(shù)可以調(diào)用其自身。但在使用遞歸時(shí),程序員需要注意定義一個(gè)從函數(shù)退出的條件,否則會(huì)進(jìn)入死循環(huán)。
遞歸函數(shù)在解決許多數(shù)學(xué)問(wèn)題上起了至關(guān)重要的作用,比如計(jì)算一個(gè)數(shù)的階乘、生成斐波那契數(shù)列,等等。
數(shù)的階乘
下面的實(shí)例使用遞歸函數(shù)計(jì)算一個(gè)給定的數(shù)的階乘:
#include
{ if(i <= 1) ? { ? ? ?return1;
} returni * factorial(i - 1);
}
intmain()
{ inti = 15;
printf("%d 的階乘為 %f ", i, factorial(i));
return0;
}
當(dāng)上面的代碼被編譯和執(zhí)行時(shí),它會(huì)產(chǎn)生下列結(jié)果:
15的階乘為1307674368000.000000
斐波那契數(shù)列
下面的實(shí)例使用遞歸函數(shù)生成一個(gè)給定的數(shù)的斐波那契數(shù)列:
#include
{ if(i == 0) { return0;
} if(i == 1) { return1;
} returnfibonaci(i-1) + fibonaci(i-2);
}intmain()
{ inti;
for(i = 0; i < 10; i++) ? ?{ ? ? ? printf("%d ", fibonaci(i));
} return0;
}
當(dāng)上面的代碼被編譯和執(zhí)行時(shí),它會(huì)產(chǎn)生下列結(jié)果:
0112358132134
-
C語(yǔ)言
+關(guān)注
關(guān)注
180文章
7594瀏覽量
135861 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4277瀏覽量
62323 -
遞歸
+關(guān)注
關(guān)注
0文章
28瀏覽量
9003
原文標(biāo)題:C語(yǔ)言中的遞歸
文章出處:【微信號(hào):c-stm32,微信公眾號(hào):STM32嵌入式開(kāi)發(fā)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論