千峰Java教程 070 遞迴演算法

2021-09-23 14:31:57 字數 1089 閱讀 3833

鍊錶(linked list)一種常見的資料結構,是一種線性表,但是並不會按線性的順序儲存資料,而是在每個節點裡存到是下乙個節點的指標(pointer)。

在鍊錶資料結構中,我們需要用到遞迴演算法

遞迴演算法是一種直接或間接地呼叫自身演算法的過程。在計算機編寫程式中,遞迴演算法對解決一大類問題是十分有效的,它往往使演算法的描述簡潔而易於理解。

我們來寫一下階乘的**:

public class demo1

public static int jiecheng1/*階乘1,這個方法用for來試試,先不用遞迴*/(int num)

return result; }

public static int jiecheng2(int num)//這次用遞迴方式,自己呼叫自己

return num * jiecheng2(num - 1);//這裡是呼叫了自己 }}

/*結果:

3628800

3628800

*/

我們分析一下遞迴:

1、遞迴必須要有出口

2、遞迴記憶體消耗太大,容易發生記憶體溢位:比如我們給jiecheng2傳入5(計算後輸出120),第一步,傳入num==5,5!=1,所以返回下面的num*jiecheng2(num-1),就是5*jiecheng2(4),第一次呼叫這個方法,沒有結束,需要等jiecheng2(4)返回值之後才能返回5*jiecheng2(4)才行;然後看jiecheng2(4),4!=1,此時返回的是4*jiecheng2(3),第二次呼叫這個方法,還沒結束,要等jiecheng2(3)返回值才行;接著看jiecheng2(3),按照上面所說,應該返回3*jiecheng2(2);再看jiecheng2(2),應該返回2*jiecheng2(1);這時候,jiecheng2(1)返回的是1,再一步一步的返回前面的數,這樣,就變成了1*2*3*4*5=120,最終返回120。這時候,方法被呼叫了5次,入了5次棧

3、層次呼叫越多,越「危險」,可能溢位

千峰Java教程 025 Java陣列的定義

首先 問題 乙個班裡有50名同學,如何在程式中輸出所有同學的學號?陣列 一組能夠儲存相同型別值的變數的集合。當我們有一組相同型別的資料需要儲存,如果此時使用單個變數來儲存,我們將要定義若干個變數名,這樣將會非常繁瑣,並不利於維護。定義陣列 方法一 使用預設的初始值來初始化陣列中每乙個元素 語法 陣列...

千峰Java教程 031 直接插入排序演算法

直接插入排序演算法 從後向前找到合適的位置後插入,穩定排序演算法 基本思想 每一步將乙個待排序的記錄,按其順序碼大小插入到前面已經排序的子串行合適位置 從後向前找到合適位置後 直到全部插入排序完為止。假如有這樣乙個陣列 86,54,23,7,90,48,11,66 從小到大排 我們假設,86為基準,...

千峰Java教程 037 物件導向基本概念

首先,來看看面向過程和物件導向 面向過程 以步驟為單位,一步一步完成某乙個具體事情 物件導向 以物件為單位,通過排程組合不同的物件完成某乙個事情 更高階 一 什麼是物件導向 1 物件導向是一種程式設計思想。2 物件導向是一種思考問題的思維方式。二 建立物件導向的思維方式 1 先整體,再區域性。2 先...