遞迴寫法轉成迭代

2021-08-20 08:45:36 字數 560 閱讀 9757

乙個常見的遞迴演算法例子:

//斐波那契

long fib(int n)

1、例如求fib(10) 中間值fib(3)會被求值21次。但是其實只需求一次即可,剩餘的20次求職 屬於資源的浪費。

2、每一次的fib計算都導致兩次的遞迴呼叫,成指數增長形勢。需要大量的堆疊來儲存函式呼叫資訊儲存。

以上例子是屬於 尾遞迴形式,容易寫成迭代的形式。

for(i=0;i2

else

}

再看一例子,模仿堆疊資訊儲存來模擬遞迴呼叫:

void recursive_print_data(unsigned int value)//value=123456,列印各個位的值,遞迴寫法

void iterative_print_data(stack_st *stack,unsigned int value)//迭**法,用到棧形式儲存(先進後出)

while(!is_stack_empty(stack))

}

堆排序(公升序,降序,迭代,遞迴寫法)

是一種選擇排序。平均時間複雜度為0 nlogn 是不穩定排序 大頂堆 完全二叉樹,每個節點的值都大於或等於其左右子節點的值。左右子節點的值不作要求 小頂堆 完全二叉樹,每個節點的值都小於或等於其左右子節點的值 將待排序序列構造層乙個大頂堆 左節點2n 1 右節點2n 2 父節點 i 1 2 序列的最...

堆排序(遞迴 迭代三種寫法)

具體的演算法流程可以參考 排序演算法 三 之堆排序 堆排序的基本思路 這裡重點討論下調整堆結構這個操作,這個結構是建立在大頂堆已經建立的基礎上的,有遞迴和迭代兩種方法。遞迴方法 public void heapify int arr,int n,int i 非遞迴方法 public void adj...

遞迴和迭代 迭代與遞迴

很多程式設計小白都會遇到 迭代 和 遞迴 的問題 包括我自己 大部分同學還是不知道迭代與遞迴的區別。下面我就嘗試用最通俗易懂的模式講解遞迴與迭代的區別。1.迭代 迭代其實很簡單,我們在程式設計中經常用到迭代。比如說 i 1 print i 這個就是乙個迭代,沒想到吧。迭代的意思其實就是在迴圈 現了參...