java - 请帮我解决这个递归函数
问题描述
void myMethod( int counter) {
if(counter == 0)
return;
else {
System.out.println("hello" + counter);
myMethod(--counter);
System.out.println("" + counter);
//return;
}
}
当我将 3 传递给函数时,输出将是
hello3
hello2
hello1
0
1
2
我明白为什么输出有 hello3 hello2 hello1,但为什么是 0 1 2?当计数器从 3 减少到 0 时,它应该进入 if 并返回,对吗?程序怎么会上System.out.println("" + counter)
线?
解决方案
由于它是递归的,并且递归调用出现在您的打印行之前,它会一遍又一遍地递归调用自己,直到达到基本情况。只有在递归调用结束后,您的打印才会被允许执行。
像这样的东西
Do something
first recursive call
Do something
second recursive call
Do something
third recursive call
Ending recursive
Ending recursive
Ending Recursive
首先,整个方法将停止,但正如您可以看到的那样,递归调用的基本情况/结束实际上将在其他递归方法中执行,因此您在 012 的表单中看到的是递归结束后执行的行.
推荐阅读
- machine-learning - 进行 PCA 分解后,所有分类器都给了我完全相同的准确度
- javascript - 如何使用正则表达式从按文件格式取消选中所有文件
- python - 无法在开启端口转发的另一台 PC 上访问 MySQL 数据库
- python - Django 返回文件和模板
- javascript - React add 和 remove 如何协同工作?
- javascript - ES6 中函数后面的模板文字(反引号)的目的是什么?
- wordpress - 在 Gutenberg 图像、封面和画廊 - 块中编辑 srcset 和尺寸属性
- java - 如何通过 Android DownloadManager 避免损坏的下载?
- python - Scipy.optimize.mininize 获取函数评估的数量
- mysql - 有四个字段的复合索引,需要用到三个