2015-12-09 61 views
-4

這是我的老師使用遞歸打印模式的代碼。 爲什麼打印「你在這裏」?我無法理解外部循環。請幫忙!與函數和遞歸相關

#include<stdio.h> 
#include<stdlib.h> 

int display (int n) 
{ 

    printf("\nFunctionCalled\n"); 
    if (n==-1) 
    { 
     return n; 
    } 

    else 
    { 

     display (n-1); 


     printf("Are You Here "); 


     for (int i=0;i<=n;i++) 
     { 
      printf("*"); 
     } 

     printf("\n"); 

     return n; // where is this value being returned ?? 

    } 

} 
+2

嘿!我看不到主要功能?!? – Cherubim

+0

觀看FunctionCalled在您通過-2時打印多少次:) –

+0

爲什麼不問你的老師?這是他**的工作來解釋。通過使用調試器和單步找出你自己。 – Olaf

回答

1

當您的主函數首次調用應用程序時,它期望返回值。除非傳遞給它的n爲-1,否則自調用函數後面的行會發生一次,因爲它在main中調用並且必須到達函數的末尾。當自調用函數返回一個數字時,該函數不會結束main中的display函數調用,else塊中的最後一個return n;會執行此操作。

遞歸是最容易理解的時候,一步一步來。所以我會建議這樣做以充分理解它。

+0

爲什麼我每次返回n語句後n的值都會增加? –

+0

@ Mr.X @ Ryan.Fitzpatrick解釋得很清楚。一步一步地貫穿它。它每次都在遞減(或者像這樣出現),因爲你用n-1遞歸地調用'display',所以它會爲每個'n'顯示* s,從'n'開始,然後是'n-1',然後'(n-1)-1'等,直到'n-1'等於'-1'。 –

+0

!非常感謝 ! –