對一條語句輸出迴文值的補充

之前發過一篇博客,寫的是關於一條語句輸出迴文值,在發那篇博客的時候並沒有看懂那條語句的執行過程,現在補充道這裏。

原來那篇博客的地址是:http://blog.csdn.net/jianzhibeihang/archive/2009/12/06/4952037.aspx

 

今天特定在c版發了貼問了下,發現了很多好的回帖。版裏的大牛還是很多啊!
原帖地址爲:http://topic.csdn.net/u/20091209/10/d7cc1cc3-3eff-43d2-8096-c66a78996b3d.html#replyachor

 

首先解釋下,這條語句的執行過程,以p(1,3)爲例:
printf語句返回輸出的字符個數,由於有/n,所以printf執行始終爲真

第一層:p(1,3):printf執行爲真                                                                                       輸出:1
                     3>1執行爲真                   接下來會執行p(2,3)或p(1,1)
                     p(2,3) 或者 p(1,1)
第二層:p(2,3):printf執行爲真                                                                                      輸出:2
                     3>2執行爲真                   接下來會執行p(3,3)或p(2,2)
                     p(3,3)或者p(2,2)
第三層:p(3,3):printf執行爲真                                                                                      輸出:3
                     3>3執行爲假                   p(3,3)執行爲假,返回到第二層執行p(2,2)
                                                         因爲對於||操作符,||操作左邊的表達式爲假
                                                         則執行右邊的表達式,所以執行p(2,2)
返回到第二層p(2,2):printf執行爲真                                                                                 輸出:2
                           2>2爲假                   p(2,2)執行爲假,那麼整個p(2,3)的執行就爲
                                                         假,所以對於第一層p(2,3)||p(1,1),||表達
                                                         式左邊爲假,則執行||右邊的表達式,即p(1,1)
返回到第一層p(1,1):printf執行爲真                                                                                輸出:1
                           1>1執行爲假
最終p函數返回FALSE,執行結束.

 

下面是對return一句的轉化:

int p(int i, int N)
{
    printf("%d/n", i);
    if (N>i)
    {
        if (p(i+1,N)==0)
            return p(i,i);
        else
            return  1;
    }
    else
        return 0;

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章