- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在自学 C#,很好奇一个简单的代码是如何运行的。
我在 if
语句中插入了换行符并逐行进入。我想知道为什么在编译器知道 if 语句为 false 后运行代码时,代码一直返回到 if
语句上方的花括号?在 if
语句为 true
之前,它不会返回 else 语句的结果;当它执行时,它会在 else 语句中来回向 num
值加 1 以执行阶乘。
谁能更好地向我解释一下?
namespace Factorial
{
class Program
{
static void Main(string[] args)
{
NumberManipulator manipulator = new NumberManipulator();
Console.WriteLine("Factorial of six is :" + manipulator.factorial(6));
Console.ReadLine();
}
}
class NumberManipulator
{
public int factorial(int num)
{
int result;
if (num == 1)
{
return 1;
}
else
{
result = factorial(num - 1) * num;
return result;
}
}
}
}
最佳答案
该方法是递归的,因此它会调用自身。
当你调用factorial(6)
计算6*5*4*3*2*1
时,它会依次调用factorial(5)
计算部分 5*4*3*2*1
并将其与 6
相乘。
调用factorial(5)
会依次调用factorial(4)
计算4*3*2*1
并相乘5
。
因此它会一直调用自身,直到调用为 factorial(1)
并且 if
语句的第一部分结束递归。
当您单步执行代码时,您将看到执行跳转到每个更深调用的方法的开头,直到您到达最内层的调用,它将从所有调用开始返回。如果您观察调用堆栈,您会发现它随着每个递归级别的增加而增长,然后再次缩小。
关于c# - 为什么我的程序的控制流在单步执行阶乘方法时似乎跳来跳去?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26952900/
我正在尝试使用范围输入元素构建一个 slider ,该元素在单击、滚动或长按(连续按下)时移动 1 步。我有点击和滚动所需的逻辑,但是相同的逻辑似乎不适用于鼠标按下事件(长按/连续按下)。 到目前为止
我正在编写一个跟踪其他程序执行情况的程序。我正在使用动态指令检测来跟踪 x86 的 CMP 指令的行为。 我正在使用 Windows 调试 API 来控制被调试程序的行为。我使用“仅调试此进程”标志启
我有以下代码片段。 我有点困惑,首先,为什么我的步骤参数是2,是不是因为我从字典之外跳转,所以我最终得到了总人口? 第二:i+1 到底是做什么的?以前没见过吗?如果我从 i (国家名称)跳到总人口上,
如果我同时拥有公钥和私钥,如何使用 everyauth 通过 node.js 执行非常简单的 oauth 身份验证?与多步骤 facebook 类型的身份验证不同,我只想使用 everyauth 进行
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 2年前关闭。 Improve thi
我是一名优秀的程序员,十分优秀!