问题描述
我一直在通过创建一些代码来查找数字的阶乘来练习C#。 我遇到的问题是C#如何使用for循环,以及它如何以递归方式保持值。
这是我的代码(使用迭代来实现其目标):
static int Factorial_It(int fac)
{
int fac_test = fac;
for (int i = 1; i <= (fac_test - 1); i++)
{
Console.WriteLine("i = " + i);
Console.Write($"{i} * {fac} = ");
fac = fac * i;
Console.Write(fac + "\n");
}
return fac;
}
我不得不为函数的输入分配一个变量(fac_test),然后使用该变量启动循环,因为它始终保持不变。
在另一种编程语言中,我不需要进行此更改,因为输入的原始值由for循环使用,并且从不随着循环的进行而更改。
此更改可使代码正常工作,但我希望您了解有关C#语法为何这样的更多知识-有没有办法for循环不更新每个“循环”的值?
作为参考,这是我进行修复之前的代码:
static int Factorial_It(int fac)
{
for (int i = 1; i <= (fac - 1); i++)
{
Console.WriteLine("i = " + i);
Console.Write($"{i} * {fac} = ");
fac = fac * i;
Console.Write(fac + "\n");
}
return fac;
}
这样,对于大于3的值,for循环将一直上升直到达到整数为止,因为fac变量不断变大(而不是与原始函数输入保持不变)>
我希望我的解释清楚,并为我的英语不好对不起。
Forp
编辑:
这是我基于Visual Basic的代码。
Function Factorial_It(Fac)
For i = 1 To Fac - 1
Fac = Fac * i
Next i
Return Fac
End Function
为造成困惑的歉意。
解决方法
如果您需要在不移动最终值的情况下进行循环,则可以随时向后退。
for (int i = fac - 1; i>0; i--)
{
fac = fac * i;
}
之所以起作用,是因为初始化条件在循环开始时仅执行一次。边界检查每次都会进行,没有,除了使用单独的变量外,没有其他方法可以更改该行为。