關於遞迴的一些小練習

2021-10-08 04:23:37 字數 1702 閱讀 6619

遞迴可以實現分治這種演算法,就是把乙個複雜的大問題,分解成若干個相同的小分問題,直到問題全部解決。

斐波那契數列

#include

intget_fibonacci

(int number)

//第三項開始的斐波那契數列是前2項的和

首先遞迴要判斷最後一步的情況(就是退出函式的條件)最後一塊疊上去就行了 x->y(如下圖)

然後判斷別的情況(前面的步驟)

將x上面的n-1個盤子通過z放到y上去

這時x只剩下乙個盤子將盤子移到z上去

然後將n-1個盤子用遞迴的方法從y->z移過去就行了

/*1、使用遞迴模擬漢諾塔的移動過程。*/

#include

void

move

(char x,

char y,

char z,

int number)

else

}int

main()

思路和漢諾塔一樣選取元素進行交換位置從第乙個元素開始,和後面的依次交換,交換完成一次要用遞迴對後面的元素也進行排序,如果頭元素到最後了就輸出序列即可,拍完一趟之後要對元素進行歸位,方便下面的元素進行排序。

/*2、全排列0~9。*/

#include

void

sort

(int head,

int last,

int arr)

printf

("\n");

}//不是最後就要算出後面的數的排序

else}}

intmain()

;sort(0

,9,arr)

;return0;

}

遞迴函式每呼叫一次都會在棧記憶體產生乙份自己的拷貝,直到達到出口,才一層釋放,因此使用遞迴非常耗費記憶體,與迴圈相比速度非常慢。

建議:能用迴圈解決的問題不要使用遞迴。

比如斐波那契數列用迴圈可以很快的得到結果,雖然看上去我們求幾項時間差不多,但是當基數變大到一定的程度,時間的差將會是令人吃驚的

遞迴優點:

1. 簡潔

2. 容易理解思路清晰

3. 可以解決非線性的執行過程。

缺點:2.遞迴中很多計算都是重複的,由於其本質是把乙個問題分解成兩個或者多個小問題,多個小問題存在相互重疊的部分,則存在重複計算,如fibonacci斐波那契數列的遞迴實現

3.呼叫棧可能會溢位,其實每一次函式呼叫會在記憶體棧中分配空間,而每個程序的棧的容量是有限的,當呼叫的層次太多時,就會超出棧的容量,從而導致棧溢位

總結為1、耗費記憶體、速度慢

7 15的一些小練習

使用turtle庫,繪製乙個八邊形。圖形如下所示 import turtle as t t.setup 800,600 t.pensize 5 t.seth 22.5 t.pencolor black t.circle 80,steps 8 t.done 使用turtle庫,繪製乙個八角圖形。圖形如...

接觸python的一些小練習

目錄 a nick handsome height 180 age 18 weight 140 print 身高 a 21 18 print 年齡 a 13 11 print 體重 a 3 t input 輸入體重 if t 3 jin kg eval t 3 2 print str kg kg e...

關於編譯的一些小知識

gnu編譯器 g 編譯 c 程式 在windows下,進入源 所在的路徑下,在命令列中輸入 g o test.exe test.cpp將test.cpp 編譯生成 test.exe 可執行檔案,如果沒有 o test.exe 選項,預設生成 a.exe 在linux下,進入源 所在的路徑下,在命令列...