c# - 正在更新 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
为混乱道歉。
解决方案
如果您需要在没有最终值移动的情况下循环,您总是可以倒退。
for (int i = fac - 1; i>0; i--)
{
fac = fac * i;
}
这是因为初始化条件在循环开始时只执行一次。每次都会进行边界检查,不,除了使用单独的变量之外,没有办法改变这种行为。
推荐阅读
- flutter - 构建函数返回 null,有问题的小部件是:BlocBuilder
在 flutter_bloc 包中 - flutter - 在 Flutter 中,我想通过按下按钮获取当前日期并在文本字段中显示,我该怎么做?
- reactjs - 无法在 JavaScript 中将 ObjectId 转换为字符串
- python-3.x - (Python 3) 根据对象的大小将对象映射到图像中的颜色
- firebase - 您可以向 Firebase 项目中的用户授予全面的公共访问权限吗?
- php - 从文件 CSV PHP 中删除数组中的字符
- android - 使用 firebaseui 登录 Facebook 不起作用 errorCode: 100, subErrorCode: 33, errorType: GraphMethodException
- python - Django 使用旧目录填充新项目
- javascript - 如何使用 Puppeteer 检查元素是否存在于异步/等待中
- javascript - 尝试创建 instagram 机器人,但不断收到语法错误?