iT邦幫忙

0

C語言問-列印陣列函數說明遞迴函數之呼叫

匿名 2012-03-12 12:38:485662 瀏覽

不好意思,再問一題,以下的程式,我拿去DEV-C++編譯後…

是有問題的,請問,到底那裡有誤了??

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

void invert array(int j){
if(j<6){
invert array(j+1);
printf("[%d]",list[j]);
}
}

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

printf("陣列的內容:\n");
for(i=0;i<6;i++)
printf("[%d]",list[i]);
printf("\n");
printf("遞迴列印陣列的內容:\n");
invert array(0);
printf("\n");

system("PAUSE");
return 0;
}

fillano iT邦超人 1 級 ‧ 2012-03-13 09:28:25 檢舉
說真的,這題中遞迴的邏輯真的還蠻簡單的,你可以自己花點時間想想嗎?

另外,對於學習一個語言來說,一些基本規則像是變數名稱、函數定義的格式等應該是先要了解的,這部份也建議你花點時間...
xxzero12 iT邦新手 5 級 ‧ 2012-03-14 01:38:04 檢舉
執行看看
#include<stdio.h>
#include<stdlib.h>
int list[6]={1,2,3,4,5,6};

void invert_array(int j){
     if(j<6){
             printf("J is %d:",j);
             printf("invert_array[%d]\n",j);
             invert_array(j+1);
             printf("When J is %d,list[%d]'s value is:%d\n",j,j,list[j]);
             }
     else printf("J is 6:return to the top function\n");
}

int main(int argc, char *argv[])
{
    int i;
    printf("陣列的內容:\n");
    for(i=0;i<6;i++)
    printf("[%d]",list[i]);
    printf("\n");
    printf("遞迴列印陣列的內容:\n");
    invert_array(0);
    printf("\n"); 

    system("PAUSE");	
    return 0;
}


其實我想問的是說,為何印出來的東西如下??
可否麻煩各位了解的人幫我解答一下呢?

答案很簡單
因為程式只會照你所寫的執行
而不是照你所想的執行
8
wiseguy
iT邦超人 1 級 ‧ 2012-03-12 13:24:09
最佳解答

invert array

麻煩用個底線連一下,改成:
invert_array

2
suwenfa
iT邦新手 5 級 ‧ 2012-03-13 17:00:06

剛開始學遞迴總搞不清楚程式到底怎麼執行,
我覺得你就自己一行一行去執行,呼叫自己就產生一段自己的程式碼,
然後在一個一個結束回去,應該就瞭解了。
跑 6次應該還不會太累,
當然,如果有一百個.....

4
xxzero12
iT邦新手 5 級 ‧ 2012-03-14 01:37:05
&lt;pre class="c" name="code">


把遞迴展開後如下

void invert_array(0){
     if(j&lt;6){
             print 0
             invert_array(1);
				void invert_array(1){
     					if(j&lt;6){
             				print 1
             				invert_array(2); 							
								void invert_array(2){
     								if(j&lt;6){
             							print 2
             							invert_array(3);
								.
								.
								. 直到j=6 return 後,就會開始執行invert_array(5)的下一行,也就是print5











             							printf list[2]
             							}
             				printf list[1]
             				}
				}









             printf list[0]
	}
}

從你的code看
一開始從invert_array(0)呼叫到invert_array(6)
1
invert_array(6)------------------->return回到invert_array(5)下面的printf("[%d]",list[j]);
invert_array(5)
invert_array(4)
invert_array(3)
invert_array(2)
invert_array(1)
invert_array(0)

invert_array(5)------------------>return回到invert_array(4)下面的printf("[%d]",list[j]);
invert_array(4)
invert_array(3)
invert_array(2)
invert_array(1)
invert_array(0)

invert_array(4)------------------>return回到invert_array(3)下面的printf("[%d]",list[j]);
invert_array(3)
invert_array(2)
invert_array(1)
invert_array(0)

.........4.5.
6.
invert_array(1)------------------>return回到invert_array(0)下面的printf("[%d]",list[j]);全部函式執行完畢
invert_array(0)

invert_array(0)------------------>return 然後print 4

我要發表回答

立即登入回答