2015-11-14 113 views
-4
#include <stdio.h> 
#include<string.h> 

void Magic(int in); 
int Even(int n); 

int main() 
{ 
    Magic(10); 
} 

void Magic(int in) 
{ 
    if(in == 0) 
    { 
     return; 
    } 
    if(Even(in)) 
    { 
     printf("%i\n", in); 
    } 

    Magic(in - 1); 

    if(!Even(in)) 
    { 
     printf("%i\n", in); 
    } 
    return; 
} 

int Even(int n) 
{ 
    return (n % 2) == 0 ? 1 : 0; 
} 

單數如何遞增打印? 它打印10 8 6 4 2 1 3 5 7 9. 我知道upto 10 8 6 4 2,但它怎麼打印1 3 5 7 9?降序後?單數如何打印增加訂單?

+0

如何在編輯前發佈此問題的答案這個問題理智嗎? –

+2

@MartinJames你爲什麼回滾到破壞版本? >。< – Doorknob

+0

@MartinJames我將您的編輯回滾到更適合的版本。 – NathanOliver

回答

3

有嵌套調用Magic(in - 1);。如果數字是偶數,則立即打印,然後調用Magic(in - 1);。只有當n爲零時,所有功能纔會以相反順序打印偶數。第一奇數數量由最深Magic()功能印刷:

Magic(10) 
    |print 10 
    |Magic(9) 
    | |Magic(8) 
    | | print 8 
    | | ... 
    | |  Magic(1) 
    | |   Magic(0) 
    | |    return; 
    | |   print 1 
    | |   return 
    | | ... 
    | | return 
    | |print 9 
    | |return 
    |return 
0

,這是通過該函數的遞歸引起的。該函數按照它被調用的順序返回。如果要在偶數後按降序打印奇數,則需要將它們保存在同樣傳遞給魔術功能的變量(數組)中