奇数打印增加顺序如何?

时间:2015-11-14 21:19:57

标签: c

#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。 我知道最多10 8 6 4 2但它怎么打印1 3 5 7 9?降序后?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

这是由函数的递归引起的。函数按照调用的顺序返回。如果你想在偶数后按降序打印奇数,你需要将它们保存在一个也传递给魔术函数的变量(数组)中