我做了一个小程序来练习递归,但是我无法按照你的预期使它工作。在目前的状态下,该程序有点可行但不像我想要的那样。
我正在寻找的是按照从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)
答案 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
}