遞回
遞回簡單點來說就是函式本身呼叫它自己的一種方式;
用一個比較容易理解故事來解釋一下:從前有座山,山上有座廟,廟里有個老和尚講故事,講的是什么呢,講的是從前有座山,山上……相信后面的故事大家已經知道了,這是一個無限套娃的程序
它就像我們高中時期學過的遞推數列一樣:
設a1=1,an=a(n-1)+c,an的每一項都與它的前一項有關,遞回也是一樣的道理,它在運行程序中會呼叫它自己,來完成自己的作業,
相信大家現在已經對遞回有了初步的認識,那么接下來就深入了解一下遞回吧,
首先了解一下構成遞回需具備的條件:
- 子問題須與原始問題為同樣的事,且更為簡單;
- 不能無限制地呼叫本身,須有個出口,化簡為非遞回狀況處理,
如果不設定一個出口那么函式就可能無限回圈下去,最終可能導致電腦崩潰,所以在程式設計時一定要設定遞回出口,
那么下面就通過著名的斐波那契數列分析一下遞回吧
斐波那契數列指的是這樣一個數列:
1,1,2,3,5,8……
這個數列從第3項開始,每一項都等于前兩項之和,
它就像數學中的遞推數列,其中a1=1,f(n)=f(n-1)+f(n-2),那么這里我們將a1=1設為其遞回出口,保證其穩定運行,然后運用函式寫一個自定義函式f(n)=f(n-1)+f(n-2);這樣我們就能求斐波那契數列了,
下面附上源代碼#include <stdio.h> //自定義函式程序 int f(int n) { //設定出口,f(1)=1,f(2)=1 if (n == 1) { return 1; } if (n == 2) { return 1; } else { return( f(n - 1) + f(n - 2)); } } int main() { //輸入項數 int n; printf(“請輸入項數:”); scanf_s("%d", &n); int num = f(n); printf("%d", num); }
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/205666.html
標籤:其他
