1. 程式人生 > >C語言遞歸函數講解

C語言遞歸函數講解

字符數 遞歸函數 最終 條件 run 等等 const 循環函數 操作數

遞歸函數是什麽?

是函數、、、、、、、、、、、、、、、、、、、、

你可以把它理解成是for循環與死循環的結合的函數。簡單的說:遞歸函數是有條件終止的死循環函數;

        死循環函數是指在函數體中調用自身;

舉個列子:

用遞歸函數算出1*2*3*4*..........*n的值

int test_1(int n)

{

  if(n==0)  //終止遞歸函數的循環

  retrun 1;  //1*(最終值) = (最終值)

  else    

  retrun test(n-1) *n;   //調用自身,參數-1,得到值,最後會得到最終值

  /*過程:

    1.  test(3)*4;

    2.  test(2)*3*4;

    3.  test(1)*2*3*4;

    4.  test(0)*1*2*3*4;

    註意,這裏——(  上面的test(0)又會重新進入test,此時retrun 1  )

    所以步驟4實際上就是:  1*1*2*3*4;

    實際上元素:1,2,3,4都是使用了的,所以最終值就是(1*2*3*4),而另外的一個1(test(0))只是讓test函數不再循環下去的一個條件裏面的語句;

    也就是說在if裏面可以返回任何值res,不一定只是返回1。但是必須滿足res*1*2*3*4 = 1*2*3*4;這裏的語句要根據4步驟來決定;

    我們回看4步驟:test(0)*1*2*3*4——test(0)會進入if條件裏面,也就終止調用自身,終止了函數循環,然後返回值是1

    所以test(0)*1*2*3*4 = 1*1*2*3*4

  */

}

void main()

{

  int res = test(4);

  printf("值=%d\n",res);

}

以上就是遞歸函數;

遞歸函數邏輯思維要求比較高,有些企業面試的時候也會涉及這類問題;

我們可以看到這只是一個返回值為int 的遞歸函數,遞歸函數可不止這一種;

  ——還有遞歸函數操作數組,遞歸函數打印圖案或者文字,遞歸函數甚至可以操作指針這些;

萬變不離其宗,下面舉一些例子:

// 1、給一個空的字符數組添加元素,(利用遞歸)
void homeWork_2(char a[],int n)
{
if(n==0)
printf("");
else{
a[n-1] =(‘a‘+(n-1));
homeWork_2(a, n-1);
}
}

// 2、利用數組名進行傳參,進行數組的求和。

int sum(int a[],int n){

if(n==0)

return 0;

else

return sum(a,n-1) + a[n-1];

}

int main(int argc, const char * argv[]) {

 int arrs[7] = {1,2,3,4,5,6,7};

  int res = sum(arrs, 7);

printf("數組和是:%d\n",res);

這裏簡單舉了兩個例子,遞歸函數一定要多去思考邏輯和多去敲代碼;只要邏輯清晰,代碼熟練,無論是操作整型,數組,指針等等都是一樣的。

C語言遞歸函數講解