C語言中遞迴的原理
最近在學資料結構的二叉樹,裡面的實現好多都是遞迴。博主大一上學期也沒有認真學遞迴,結果就好多不懂。今天特別請教了班上搞ACM的,再上網猜了一些資料才算初步弄懂遞迴的實現原理。
遞迴的底層實現其實是棧,而棧是先進後出的(即先入棧的反而後出棧(類似水瓶中放物取物))
下面是一段階乘遞迴的案例程式碼
#include<stdio.h> //一個求階乘的遞迴演算法 int f(int n) { if(n==1) { return 1; } else { return n*f(n-1); } } int main() { printf("%d",f(4)); //求4的階乘 return 0; }
程式首先執行的是f(4),進入之後會直接return f(4-1)*4.也就是把這一項入棧.(儘管暫且不知道該式子的具體結果是多少,但不用管,先將它入棧,之後得知f(4-1)的結果後再計算便是)
依次類推,第二次遞迴就是f(3-1)*3入棧
直到n=1,不再遞迴,將1入棧
然後便是出棧了,按照先進後出的特點,先出棧的是f(1)
依次類推,第二個出棧的是f(2),f(2)的結果可根據f(1)得到,一直出棧,直到棧空為止
最終便實現了階乘
博主只是一名學生,能力有限,如有錯誤歡迎各位指出。也希望這篇文章能幫到那些沒有搞ACM的同學。