C和C指標小記 十一 遞迴和迭代優化

2022-05-22 11:00:09 字數 1019 閱讀 9068

c通過執行時堆疊支援遞迴函式的實現.

遞迴函式就是直接或間接呼叫自身的函式.

乙個小例子:

/**

使用遞迴將整型轉換為ascii字元

@param value 整型數

*/void binary2ascii(unsigned int value)

putchar(value % 10 + '0');

}

尾遞迴:遞迴呼叫出現在函式的尾部,並且之後不再執行任何任務

尾遞迴可以方便的轉換為迭代.由於遞迴是非常耗費記憶體的(每次函式呼叫都會在記憶體中分配空間),記憶體頻繁的分配**嚴重影響程式的執行效率.

/**

遞迴計算階乘

@param n 整數n

@return 階乘

*/long factorial(unsigned int n)else

}/**

迭代計算階乘

@param n 整數n

@return 階乘

*/long factorial_iteria(int n)

return result;

}/**

遞迴計算斐波那契數

效率非常低:計算fibonacci(10)時,fibonacci(3)重複計算了21次,計算fibonacci(30)時,fibonacci(3)計算了317811次

@param n 整數n

@return n的斐波那契數

*/long fibonacci(int n)

return fibonacci(n - 1) + fibonacci(n - 2);

}/**

迭代求斐波那契數列

@param n 整數n

@return n的斐波那契數

*/long fibonacci_iteral(int n)

return result;

}

C和C指標小記 十七 使用結構和指標 鍊錶

鍊錶 linked list 即使是一些包含資料的獨立資料結構的 node 集合.鍊錶中的每個節點通過鏈或指標鏈結在一起.程式通過指標訪問鍊錶中的節點.節點通常是動態分配的,但也有由節點陣列構建的鍊錶 即使這樣,程式也是通過指標來遍歷鍊錶 單鏈表中,每個節點包含乙個指向鍊錶下一節點的指標.鍊錶最後乙...

C 迭代器iterator和指標

1.指標和iterator都支援與整數進行 運算,而且其含義都是從當前位置向前或者向後移動n個位置 2.指標和iterator都支援減法運算,指標 指標得到的是兩個指標之間的距離,迭代器 迭代器得到的是兩個迭代器之間的距離 3.通過指標或者iterator都能夠修改其指向的元素 指標是c語言裡面就有...

C 迭代器和指標區別

1 總的說 1 範圍 指標屬於迭代器的一種 指標可以用來遍歷容器 陣列 2 功能 迭代器有著比指標更細的劃分並對應能力不同的功能 過載不同的運算子 3 行為 迭代器比指標更統一和良好的用法 更輕易使用begin 和end 不用擔心越界 2 迭代器 1 迭代器不是指標,是類模板,表現的像指標。模擬了指...