初學遞迴函式
一:知識點
1:c++
中乙個函式體中出現呼叫自身的語句,稱為直接遞迴呼叫。被呼叫的另乙個函式有反過來呼叫原函式,稱為間接遞迴呼叫。(間接呼叫自身)
2:遞迴的能力在於用有限的語句來定義物件的無限集合。
3:遞迴程式在執行過程中,一般具有如下模式
:①:將呼叫程式的返回位址、相應的呼叫前的變數都儲存在系統堆疊中;
②:執行被呼叫的函式
③:若滿足退出遞迴的條件,
則退出遞迴,並從棧頂上彈回返回位址、取回儲存起來的變
量值。繼續沿著返回位址,向下執行程式:
④:否則繼續遞迴呼叫,只是遞迴呼叫的引數發生變化:
增加乙個量或減少乙個量,重複
執行直到遞迴呼叫結束。
二:典型例題
1:fibonacci
數列:數列形如:0,1,
1,2,
3,5,
8,13,
21,34,
55……
推理可知;f(n)=f(n-1)+f(n-2) (n>=3時)
f(1)=0,f(2)=1;
由此可通過公式寫成程式:
#include
using namespace std;
int f(int n);
int main()
int f(int n)
2:漢諾塔問題
傳說印度的主神梵天在乙個黃銅板上插了3 根寶石針,並在其中一根針上從上到下按從小到大的順序串上了
64個金片。梵天要求僧侶們把金片全部移動到另一根針上去,規定每次
只能移動一片,且不許將大片壓在小片上。移動時可以借助第三根針暫時存放金片。梵天說,
這64 個金片全部移至另一根針上時,世界就會在一聲霹靂之中毀滅。這就是漢諾塔問題。
(要想把所有的金片全部移到另乙個針上並且一次只能移動一片。可以借助另乙個針。簡單理解為把針從a移到
b,借助乙個
c。先把前
n-1個盤移到盤
c,再把第
n個盤移到
b盤上,
類似,把c盤上
n-1個盤上的前
n-2
個移到a
盤,第n-1
盤移到b
盤,以此類推,一直借助a盤和
c盤完成傳遞。)
**如下:
include
using namespace std;
int m(int n,char a,char c,char b);//定義函式n為第
n個盤子,a,
b,c分別表示三個針
int main()
int m(int n,char a,char c,char b)//a-->b,c為過度盤,定義在中間}結果
輸入 2 輸出
a-->c a-->b c-->b
即先把上面的盤子從a移到
c,再把下面的盤子移到
b,再把
c上的移到b上。
三:初學遞迴的心得體會:
運用遞迴呼叫可以把一些複雜問題簡化為多個簡單的小問題去解決,即利用題意給出的一些提示或者推理出其中的函式,進行簡化解決。正因為如此,我認為遞迴的難點則在於去找出這些提示或者推出其中的規律,個人認為可以通過多做一些典型例題去尋找其中的規律,作為乙個初學遞迴的學生我感覺現在的任務則是多去練習一些題去慢慢掌握好遞迴呼叫。更希望以後能學好遞迴去解決一些複雜問題吧。
Python呼叫MongoDB使用心得
本文是乙個python 使用mongodb 的簡單教程,將使用pymongo 對mongodb進行的各種操作進行了簡單的彙總,nosqlfan進行了簡單整理,使用python的同學可以看一看。基本使用 安裝對應語言的driver,python 安裝 pymongo easy install pymo...
Python呼叫MongoDB使用心得
本文是乙個python 使用mongodb的簡單教程,將使用pymongo對mongodb進行的各種操作進行了簡單的彙總,我們進行了簡單整理,使用python的同學可以看一看。基本使用 安裝對應語言的driver,python 安裝 pymongo easy install pymongo使用方法 ...
python模組呼叫心得體會
我們知道,python流行的很大的原因就是 模組化,開源供他人使用 當我們呼叫模組時,一般來說,都需要看簡介等,但是對於如何具體呼叫其函式 類,並不是很清楚。好在python規定了模組化必須有 init py檔案,通過該檔案可以看到類 函式 巨集定義等。先翻譯 輪廓 contours 那麼在cv2的...