C# 对于正在更新的循环值

C# 对于正在更新的循环值,c#,function,for-loop,iteration,C#,Function,For Loop,Iteration,我一直在练习C#,通过创建一些代码来查找数字的阶乘。 我的问题是C#如何使用for循环,以及它如何以递归方式保持值 下面是我的代码(它使用迭代来实现其目标): 很抱歉给您带来困惑。如果您需要循环而不让最终值移动,您可以随时后退 for (int i = fac - 1; i>0; i--) { fac = fac * i; } 这是因为初始化条件只在循环开始时执行一次。每次都会进行边界检查,不,除了使用一个单独的变量之外,没有办法改变这种行为。不太清楚你在问什么。是的,在每次迭代

我一直在练习C#,通过创建一些代码来查找数字的阶乘。 我的问题是C#如何使用for循环,以及它如何以递归方式保持值

下面是我的代码(它使用迭代来实现其目标):


很抱歉给您带来困惑。

如果您需要循环而不让最终值移动,您可以随时后退

for (int i = fac - 1; i>0; i--)
{
    fac = fac * i;
}

这是因为初始化条件只在循环开始时执行一次。每次都会进行边界检查,不,除了使用一个单独的变量之外,没有办法改变这种行为。

不太清楚你在问什么。是的,在每次迭代中使用变量的当前值测试条件。这是预期的行为。你能用这里的答案来说明你在寻找什么吗?(从根本上说,“结果”和“需要迭代的次数”是不同的信息,因此属于不同的变量。)您能否提供一种编程语言的名称,使原始版本能够正常工作?我所知道的每种语言都会更新fac值,c在这里也不例外。这是一种非常奇怪的计算阶乘的方法,一方面你通过不乘以fac来保存一个运算,另一方面你通过乘以
1来浪费一个运算。此外,您的函数还返回
0!=0
,这是错误的。@WiktorZychla,他可能指的是Python及其列表迭代器之类的东西,你也可以用C#和
枚举。Range
@Blindy:是的,我指的是类似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;
        }
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;
}