今天來講解一個在程式的世界中,相當重要的觀念,叫做遞迴。
在數學或是電腦科學領域中,遞迴都是一個非常重要的概念,簡單來說,遞迴就是用自己來定義自己。
數學上的遞迴
數學上常使用遞迴來定義數列。例如常見的費波那契數列:
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89....
如果我們把數字一個一個列出來是相當花時間的,所以在數學上,我們可以以遞迴來定義:
依照這個定義,雖然我們不能直接知道第n項的值,但卻可以依照先
前的數字一個一個繼續往下寫。
程式上的遞迴
在程式語言的世界中,遞迴又是怎麼一回事呢?簡單來說,就是一 個函數在定義中呼叫自己。 在函數中呼叫自己,就是遞迴函數:
int func(int n){
return func(n-1)
}
我們來看看 func 這個函數在做什麼事,它只做一件事,就是回傳 func(n-1)。 仔細拆解來看,那 func(n-1) 又在做什麼呢?它只做一件事,就是回傳 func(n-2)。 那func(n-2)又在做什麼呢?它同樣只做一件事,就是回傳 func(n-3)。
但有沒有發現一件是呢,就是根本沒完沒了的一直算下去了,所以在遞迴程式中,最重要的事是要設定初始即終止條件。
int func(int n){
if(n==1){
return 1;
}
else{
return func(n-1)
}
}
當程式運算至func(1)就會回傳1,而不會再呼叫自身繼續運算下去了。
以上就是今天的主題,以Java演示了遞迴的概念。
Hi, I am Grant.
個人部落格 - https://grantliblog.wordpress.com/
個人網站 - https://grantli-website.netlify.app/#/mainpage
我的寫作專題 - https://vocus.cc/user/5af2e9b5fd89780001822db4#