java - 递归基础
问题描述
我已经阅读了有关递归的内容,并且对理解我在阶乘中使用的一个非常基本的东西非常感兴趣。因为我已经很好地研究了它,看到了它的特定视频,但不知何故,这件事让我非常困惑。我可以选择编写代码并继续前进,但我正在学习好东西。
从这里是递归的来源:
我有一件事要问,因为在代码中我看到了一件事就是if-else
. 我非常了解 if else 的情况。但是在这里,事情有点复杂。
public static int fact(int n){
if(n <=1)
return 1;
else
return n * fact(n-1);
}
在上面的代码中,这里的结果似乎是正确的,但不知何故,我认为为什么它在满足条件时不只返回 1,以及它是如何打印正确的结果的。有一个我无法抓住的问题。请帮助我度过难关。
将我视为编码领域的学习者。谢谢
解决方案
简单的试运行将引导您找到答案。N 每次都减一,直到达到 1。
例如,让我们将 N 视为 4
它将进入 else 语句,这将成为return 4 * fact(4-1)
递归现在有4 * fact(3)
事实 3 会导致3 * fact (2)
这将使第一个方程等于4 * 3 * fact(2)
;
它发生直到 N 变为 1 所以整个方程就像4 * 3 * 2 * 1
在 1 处,递归停止,我们开始通过递归堆栈返回。
希望它能澄清你的问题。
推荐阅读
- ios - iPhone X没有depthData,iPhone XS很好
- python - 接受列表和元素并生成一个列表的 Python 函数
- ios - iOS SwipeAction 有时会移动到 UITableViewCell 后面,并且在向左或向右滑动时它不会移动
- python - 如何将类似于列表的字符串更改为再次列出?
- google-apps-script - 很抱歉,从存储读取时发生服务器错误。错误代码 PERMISSION_DENIED
- r - R中带分号的表达式()命令
- python-3.x - ortools vrp 没有给我任何解决方案
- node.js - 无法在来自nodejs的猫鼬中使用聚合
- javascript - 如何修复 1 状态差距?
- xml - 我的 VB 代码附加了两个节点而不是只有一个