2014-01-26 59 views
0

我想了解下面的代碼,我很難理解它。
這對你來說非常基本,但對我來說則相當複雜。我真的很感激你的回答。瞭解一個基本程序

#include<stdio.h> 
void fun(int); 
int proc(pf, int, int); 

int main() 
{ 
    int a=3; 
    fun(a); 
    return 0; 
} 

void fun(int n) 
{ 
    if(n > 0) 
    { 
    fun(--n); 
    printf("%d,", n); 
    fun(--n); 
    } 
} 

從我瞭解的樂趣是什麼需要3等等 - >fun(3)然後調用該功能,直到n不>大於0,因此必須存放3,2,1,0吧?

但再次將打印0,因爲0是不是比0

更大的什麼我不明白的是if語句內printf,因爲我們打印如果n>0所以當0不大於0它不應該跳過這種說法嗎?什麼都不返回?

我知道它在打印什麼,但我真的很想理解。

讓我知道如果我的問題是很清晰

回答

1

我希望這將舉例說明:

  fun(3) 
      ------ 
       ↓   
      fun(2) print → fun(1) .. 
       ↓ 
      fun(1) print → fun(0) 
       ↓ 
      fun(0) print → fun(-1) 
+0

哦,好吧,因爲它調用兩次 – user2985083

2

n爲1,控制流進入if語句,但隨後n立即遞減(fun(--n)),所以它變爲0

+0

沒關係,我理解,但後來它遞減爲-1,然後再返回1 2 0,我不明白 – user2985083

+1

@ user2985083第二遞歸調用**之後** printf,這就是爲什麼。我建議你在紙上繪製調用堆棧或在調試器中檢查你的程序。 – 2014-01-26 12:51:52

+0

謝謝你的幫助 – user2985083