我有一个家庭作业,我应该制作一个写出' *'标记,第一行中的一个,第二行中的两个,依此类推。扭曲是,它必须用递归方法制作,我无法真正处理它。
static void csillag(int i,int x = 1)
{
for (int z = 0; z < x; z++) Console.Write('*');
x++;
while (i > x)
{
Console.WriteLine();
csillag(i);
}
}
这是我提出的代码,但由于某些原因它无法正常工作,它会在每行中无限地编写单个*。我想,也许是&#34; int x = 1&#34;每次方法运行时,part都会将x重置为1。希望你能提供帮助,抱歉我不专业的英语。
答案 0 :(得分:1)
首先,这是一个奇怪的案例,向您展示递归函数的真实用例,但以下解决方案有效。请不要复制并粘贴它,并首先阅读它的工作原理以及为什么它不是一个好问题:
static void Main(string[] args)
{
PrintStar(1, 10);
}
static void PrintStar(int n, int max)
{
Console.WriteLine(new String('*', n));
if (n == max)
return;
PrintStar(n + 1, max);
}
它的工作原理是因为我只是通过滥用函数调用来实现一个简单的循环;但是,正如你所看到的PrintStar(n)和PrintStar(n + 1)完全不相关,为什么你应该用一个带有额外不必要函数调用的函数来替换一个简单的循环?!
注意:如果你明白了,现在尝试修复你的解决方案。