函數及函數的遞歸(二)(零基礎學習C語言)

函數的聲明及定義
編譯器是一條一條語句往下掃描的
函數及函數的遞歸(二)(零基礎學習C語言)
函數及函數的遞歸(二)(零基礎學習C語言)
注意:
1.int Add(int ,int);也可以(x,y並不會使用)int Add(int x,int y);(也行)
2.一定要記得打;
函數及函數的遞歸(二)(零基礎學習C語言)
建議:函數的定義寫在main函數的上面
函數及函數的遞歸(二)(零基礎學習C語言)
一般的使用場景(分模塊實現)
函數及函數的遞歸(二)(零基礎學習C語言)
主函數前引用自定義函數需要引相應的頭文件
(推薦自定義函數的頭文件使用雙引號"",庫函數引用時使用尖括號<>)
(實際上兩種都能用)
1.函數的定義在另一原文件中
函數及函數的遞歸(二)(零基礎學習C語言)
2.函數的聲明需要放在頭文件中
函數及函數的遞歸(二)(零基礎學習C語言)
3.函數調用前引下相應的頭文件即可
函數及函數的遞歸(二)(零基礎學習C語言)
注意:
(爲了防止多次引用頭文件)
#ifndef(如果沒有引用這個頭文件)__ADD_H__(自己寫的,推薦使用與頭文件相同的意義來命名)
//函數的聲明
#endif(結束)
函數及函數的遞歸(二)(零基礎學習C語言)
函數的遞歸(一個函數自己調用自己就叫做遞歸)
函數及函數的遞歸(二)(零基礎學習C語言)
函數及函數的遞歸(二)(零基礎學習C語言)
函數調用都在棧區上申請空間
當棧區的空間使用完時,程序崩潰,提示stack overflow棧溢出了
如果一直遞歸一定會出現棧溢出這樣一個問題
函數及函數的遞歸(二)(零基礎學習C語言)
函數及函數的遞歸(二)(零基礎學習C語言)
推薦一個網站
https://stackoverflow.com/
函數及函數的遞歸(二)(零基礎學習C語言)
遞歸一定不能棧溢出,需要存在限制條件使得遞歸能夠終止
函數及函數的遞歸(二)(零基礎學習C語言)
例一:
函數及函數的遞歸(二)(零基礎學習C語言)
思路:
函數及函數的遞歸(二)(零基礎學習C語言)
函數及函數的遞歸(二)(零基礎學習C語言)
代碼分析
函數及函數的遞歸(二)(零基礎學習C語言)
例題二:
函數及函數的遞歸(二)(零基礎學習C語言)
利用臨時變量count實現my_strlen函數
函數及函數的遞歸(二)(零基礎學習C語言)
遞歸實現(不用臨時變量求字符串長度)
思路:
函數及函數的遞歸(二)(零基礎學習C語言)
函數及函數的遞歸(二)(零基礎學習C語言)
遞歸分析
函數及函數的遞歸(二)(零基礎學習C語言)
函數及函數的遞歸(二)(零基礎學習C語言)
函數及函數的遞歸(二)(零基礎學習C語言)
遞歸與迭代
迭代:重複做一件事
遞歸:調用自己
例題三:
函數及函數的遞歸(二)(零基礎學習C語言)
循環實現
函數及函數的遞歸(二)(零基礎學習C語言)
遞歸思路
函數及函數的遞歸(二)(零基礎學習C語言)
遞歸實現
函數及函數的遞歸(二)(零基礎學習C語言)
例題四:
函數及函數的遞歸(二)(零基礎學習C語言)
斐波那契數列
最開始的兩個數都爲1
後一個數爲前兩個數的和
遞歸思路
函數及函數的遞歸(二)(零基礎學習C語言)
遞歸實現
函數及函數的遞歸(二)(零基礎學習C語言)
函數及函數的遞歸(二)(零基礎學習C語言)
注意:(效率不高)
函數及函數的遞歸(二)(零基礎學習C語言)
函數及函數的遞歸(二)(零基礎學習C語言)
計算第四十項斐波那契數需要用到第三項的次數
函數及函數的遞歸(二)(零基礎學習C語言)
函數及函數的遞歸(二)(零基礎學習C語言)
利用迭代的方式(類似循環)
思路:
函數及函數的遞歸(二)(零基礎學習C語言)
前兩個數一加後賦值給第三個數
函數及函數的遞歸(二)(零基礎學習C語言)
函數及函數的遞歸(二)(零基礎學習C語言)
(什麼時候使用遞歸,沒有問題,不會棧溢出時,代碼比起循環和迭代來說相對非常簡單的情況下)
一般情況,不使用遞歸
函數及函數的遞歸(二)(零基礎學習C語言)
並不是滿足那兩種情況就不會棧溢出了(參數比較大的情況下也有可能)
函數及函數的遞歸(二)(零基礎學習C語言)































































































發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章