c語言遞歸講解分析

C語言容許函數調用它本身,這種調用的過程稱爲「遞歸(recursion)」函數

舉例說明,以下代碼:spa

#include <stdio.h>
void up_and_down(int);
int main(void)
{
        up_and_down(1);
        return 0;
}
void up_and_down(int n)
{
        printf("Level %d: n location %p\n",n,&n);
        if (n < 3)
                up_and_down(n+1);
        printf("LEVEL %d: n location %p\n",n,&n);
}

定義一個函數up_and_down(int n),且函數當中再次調用自己。下面是程序運行效果:3d

[root@MiWiFi-R4-srv C]# cc recur.ccode

[root@MiWiFi-R4-srv C]# ./a.out
Level 1: n location 0x7ffdbc113dac
Level 2: n location 0x7ffdbc113d8c
Level 3: n location 0x7ffdbc113d6c
LEVEL 3: n location 0x7ffdbc113d6c
LEVEL 2: n location 0x7ffdbc113d8c
LEVEL 1: n location 0x7ffdbc113dacblog

代碼分析;函數up_and_down(int n)中在包含if語句,符合條件變再次調用自身,那麼可將up_and_down(int n)分解寫成以下形式:遞歸

void up_and_down(int n)                                           //根據主函數賦值,n=1;
{
printf(
"Level %d: n location %p\n",n,&n);
//輸出顯示:Level 1 :n .............
if (n < 3) //斷定n=1,且小於3;則進入if語句。 { n = n + 1; //在if語句中,n被從新賦值,且值爲2。 printf("Level %d: n location %p\n",n,&n);
//輸出顯示:Level 2 :n .............
if (n < 3) //再次遇到if語句,n等於2,條件語句爲真,則執行if語句。 { n = n + 1; //n被從新賦值,且值爲3。 printf("Level %d: n location %p\n",n,&n);
//輸出顯示:Level 3 :n ...........
if(n < 3) //執行斷定語句,條件語句爲假,則跳過if語句。 up_and_down(n+1); printf("LEVEL %d: n location %p\n",n,&n); //執行語句,輸出顯示:LEVEL 3 :n ......... } printf("LEVEL %d: n location %p\n",n,&n); //執行語句,輸出顯示:LEVEL 2 :n ............ } printf("LEVEL %d: n location %p\n",n,&n); //執行語句,輸出顯示:LEVEL 1 :n ........ }

分析代碼行爲以下。io

1;n 接收到主函數值爲1,運行printf()函數,以後斷定if語句,條件爲真則繼續調用自己,執行printf()函數,斷定if語句。直到if條件爲假,中止調用自己。class

2;當 n 的值爲3 時。if條件語句爲假,則跳過if語句,執行printf("LEVEL %d: n location %p\n", n , &n);(注意:此時n的值爲3).程序

3;當遞歸函數(n值爲3時)執行結束,則將控制權返回給上一級遞歸(n的值爲2)的時候,繼續完成遞歸函數。重複行爲,直到返回到主函數,即n的值爲1的時候。db

相關文章
相關標籤/搜索