Re: [問題] 為什麼結果會是倒著印呢?

看板C_and_CPP作者 (travis)時間15年前 (2010/07/19 10:43), 編輯推噓2(207)
留言9則, 5人參與, 最新討論串3/4 (看更多)
但if在第十一次不就不成立了,怎麼還會執行在誇號裡面的print呢? ※ 引述《godman362 (卯)》之銘言: : : #include<stdio.h> : : #include<stdlib.h> : : #define SIZE 10 : : int w( const int b[], int p , int k ); : : int main( void ){ : : int x ; : : int a[SIZE]={1,2,3,4,5,6,7,8,9,10}; : : x = w( a , 0 , SIZE ); : : printf( "\n" ); : : system ( "pause" ); : : return 0; : : } : : int w( const int b[] , int p , int k ){ : : if( p < k ){ : : w( b , p+1 , k ) ; : : printf( "%d " , b[p] ); : : } : : } : 第一次進去:w(a, 0, 10) : k = 10, p = 0, p < k : 做 w(b, 1, 10) : 第二次進去:w(b, 1, 10) : k = 10, p = 1, p < k : 做 w(b, 2, 10) : ..... : ..... : ..... : 第十次進去:w(b, 9, 10) : k = 10, p = 9, p < k : 做 w(b, 10, 10) : 第十一次進去:w(b, 10, 10) : k = 10, p = 10, p == k(表p沒小於k) : 做printf("%d", b[p]),接著return回上一個function : 接著上一個function下一行也是接printf("%d", b[p]); : 接著看p是多少,就印多少了 : 所以很明顯從10開始一路往回印,就是你所看到的倒著印了 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.169.160.21

07/19 10:55, , 1F
你可以推文 = =
07/19 10:55, 1F

07/19 11:01, , 2F
你trace過了沒?? trace一遍實際跟跟看你程式怎麼走的很
07/19 11:01, 2F

07/19 11:02, , 3F
困難嗎~_~
07/19 11:02, 3F

07/19 11:04, , 4F
trace的時候順便拉watch(監看式)把w()裡所有變數都拉出
07/19 11:04, 4F

07/19 11:04, , 5F
來看.....
07/19 11:04, 5F

07/19 11:14, , 6F
我猜原po大概不知道怎麼trace...
07/19 11:14, 6F

07/19 12:09, , 7F
第十次進去 p 是 9 ...
07/19 12:09, 7F

07/19 12:12, , 8F
眼殘看錯 @@"
07/19 12:12, 8F

07/19 13:09, , 9F
請嘗試使用單步執行:http://ppt.cc/~@dv
07/19 13:09, 9F
文章代碼(AID): #1CGxleka (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1CGxleka (C_and_CPP)