不好意思,再問一題,以下的程式,我拿去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;
}
#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; }
其實我想問的是說,為何印出來的東西如下??
可否麻煩各位了解的人幫我解答一下呢?
剛開始學遞迴總搞不清楚程式到底怎麼執行,
我覺得你就自己一行一行去執行,呼叫自己就產生一段自己的程式碼,
然後在一個一個結束回去,應該就瞭解了。
跑 6次應該還不會太累,
當然,如果有一百個.....
<pre class="c" name="code">
把遞迴展開後如下
void invert_array(0){
if(j<6){
print 0
invert_array(1);
void invert_array(1){
if(j<6){
print 1
invert_array(2);
void invert_array(2){
if(j<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