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 迭代器不是指標,是類模板,表現的像指標。模擬了指...