使用递归方法

时间:2016-10-03 19:10:25

标签: recursion

我做了一个小程序来练习递归,但是我无法按照你的预期使它工作。在目前的状态下,该程序有点可行但不像我想要的那样。

我正在寻找的是按照从N到0的值以降序打印,而不是从当前在代码中的10到N打印。

private static void DescendingRecursion(int n)
    {

        if (n == 10) // Base case
            return;
        else {
            DescendingRecursion(n + 1);
            Console.Write(n + " ");
        }
    }
    static void Main(string[] args)
    {
        DescendingRecursion(0);
    }

(输出:9 8 7 6 5 4 3 2 1 0)

1 个答案:

答案 0 :(得分:1)

为什么不传递最大值并在每次递归调用时传递n - 1呢? E.g。

private static void DescendingRecursion(int n)
{
    if (n < 0) { // base case
        // optional: ensures a newline at the end
        Console.WriteLine();
    } else {
        Console.Write(n + " ");
        DescendingRecursion(n - 1);
    }
}
static void Main(string[] args)
{
    DescendingRecursion(5);
    // Output: 5 4 3 2 1 0
}

修改

一种更接近原始代码的替代方法,但我绝对更喜欢上述代码:

private static void DescendingRecursion(int max, int n=0)
{
    if (n <= max) {
        DescendingRecursion(max, n + 1);
        Console.Write(n + " ");

        // optional: ensures there's a newline at the end
        if (n == 0) {
            Console.WriteLine();
        }
    }
}
static void Main(string[] args)
{
    DescendingRecursion(5);
    // Output: 5 4 3 2 1 0
}

<强> EDIT2

返回string而不是打印的版本:

private static string DescendingRecursion(int n)
{
    if (n < 0) {
        return "";
    }
    return n + " " + DescendingRecursion(n - 1);
}
static void Main(string[] args)
{
    Console.WriteLine(DescendingRecursion(5));
    // Output: 5 4 3 2 1 0
}