首页 > 解决方案 > 正在更新 For 循环值

问题描述

我一直在通过创建一些代码来查找数字的阶乘来练习 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 变量不断变大(而不是与原始函数输入保持相同)

我希望我的解释很清楚,并为我糟糕的英语感到抱歉。

福普

编辑:

这是我在visual basic中基于此的代码。

Function Factorial_It(Fac)
        For i = 1 To Fac - 1
            Fac = Fac * i
        Next i
        Return Fac
End Function

为混乱道歉。

标签: c#functionfor-loopiteration

解决方案


如果您需要在没有最终值移动的情况下循环,您总是可以倒退。

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

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


推荐阅读