循环值正在更新

问题描述

我一直在通过创建一些代码来查找数字的阶乘来练习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;
}

之所以起作用,是因为初始化条件在循环开始时仅执行一次。边界检查每次都会进行,没有,除了使用单独的变量外,没有其他方法可以更改该行为。