C語言 函式的基本使用和遞迴

2021-10-24 19:09:19 字數 2392 閱讀 8018

三、函式的呼叫

四、函式的宣告和定義

五、函式遞迴

1、庫函式

為了支援可移植性和提高程式的效率,c語言的基礎庫中提供了一系列庫函式,滿足一些基礎功能,他們不是業務性的**,在開發的過程中每個程式設計師都可能用的到,方便程式設計師進行軟體開發。

c語言常用庫函式:

使用庫函式,必須包含#include對應的標頭檔案

庫函式學習:www.cplusplus.com

2、自定義函式

函式的組成:

ret_type fun_name

(para1,*)

/*ret_type:返回值型別

fun_name:函式名

para1,*:形參列表

*/

c語言預設返回值是整形,函式傳參要發生形參例項化,這個過程要發生值拷貝。(形參的例項化之後其實相當於實參的乙份臨時拷貝)

真實傳給函式的引數,叫實參。實參可以是:常量,變數,表示式,函式等。無論實參是何種型別的量,在進行函式呼叫時,它們都必須有確定的值,以便把這些值傳給形參。

形式引數是指函式名後括號中的變數,因為形式引數只有在函式在被呼叫的過程中才例項化(分配記憶體單元),所以叫形式引數。形式引數當函式呼叫完成之後就自動銷毀了。因此形式引數只在函式中有效。

函式傳參必定形成臨時變數,臨時變數的形成是在函式被呼叫時,但正式的**執行之前。

形參例項化的順序是從右向左

:寫乙個函式可以交換兩個整形變數的內容

#include

#include

//每呼叫一次,就會將num的值加1

void

add(

int*cp)

//交換兩個整形變數的內容

void

swap1

(int x,

int y)

void

swap2

(int

*px,

int*py)

intmain()

int num1 =1;

int num2 =2;

swap1

(num1, num2)

;printf

("swap1:num1 = %d num2 = %d\n"

, num1, num2)

;swap2

(&num1,

&num2)

;printf

("swap2:num1 = %d num2 = %d\n"

, num1, num2)

;system

("pause");

return0;

}

結果:

swap1:num1 =

1 num2 =

2swap2:num1 =

2 num2 =

1請按任意鍵繼續.

..

:寫乙個函式,每呼叫一次這個函式,就會將num的值增加1。

#include

#include

//每呼叫一次,就會將num的值加1

void

add(

int*cp)

intmain()

system

("pause");

return0;

}

呼叫函式,形成棧幀;

函式返回,棧幀銷毀;

形成和釋放棧幀是有成本的(時間和空間)。

函式宣告:

函式宣告

#pragma once
#ifndef   _ test_h _

#define _ test_h _

//函式的宣告

intadd

(int x,

int y)

;#endif

// _ test_h _

變數宣告

extern

int g_val;

函式定義:

函式定義只能進行一次,但宣告可以多次進行

程式呼叫自身的程式設計技巧稱為遞迴(recursion).

遞迴的兩個必要條件: 遞迴

優點:**簡潔

缺點:效率低(原因:遞迴要多次進行函式呼叫,每次函式呼叫都會形成和釋放棧幀,而棧幀的形成和釋放是有成本的【時間和空間】)

臨時變數儲存在棧區,棧:先進後出,後進先出

C語言函式的遞迴

1.遞迴條件 採用遞迴方法來解決問題,必須符合以下三個條件 1 可以把要解決的問題轉化為乙個新問題,而這個新的問題的解決方法仍與原來的解決方法相同,只是所處理的物件有規律地遞增或遞減。說明 解決問題的方法相同,呼叫函式的引數每次不同 有規律的遞增或遞減 如果沒有規律也就不能適用遞迴呼叫。2 可以應用...

c語言函式 遞迴

函式的遞迴可以簡單的理解為迴圈,但他和迴圈是不一樣的。函式的一次遞迴呼叫相當於一次迴圈。一般情況下,迴圈要比遞迴計算的時間要快一些 函式的遞迴是在函式內呼叫自己,滿足限制條件後,就會返回到上乙個函式,知道返回到最初的函式 遞迴的呼叫條件 1 限制條件 滿足這個條件,遞迴將不再進行。2 每次的遞迴呼叫...

遞迴函式的使用 以C 語言為例

首先我來談一下遞迴的定義 遞迴過程一般通過函式或子過程來實現。遞迴方法 在函式或子過程的內部,直接或者間接地呼叫自己的演算法。可以簡單的表示成fun r 當然這個遞迴是個死迴圈,永遠不停的遞迴,所以對於遞迴,必須有乙個出口,用來結束遞迴函式的呼叫,並返回結果,類似於迴圈結構的終止條件。所以遞迴和迴圈...