java递归问题这个解决方案正确吗?有更简单的解决方案吗?
我不熟悉递归,我发现了以下Java问题:
编写一个函数,获取整数n,并打印数字1!,2.3.n
以下是我所做的,我想知道这是否是最简单的解决方案(我不确定,因为我使用了“for”循环)
public static void Print(int n) {
if (n == 0) {
System.out.print("1");
} else {
int temp = 1;
for (int i = 1; i <= n, i++) {
temp = temp * i;
}
Print(n-1);
System.out.print(temp);
}
}
顺便说一句,上一个练习是编写一个函数,获取整数n并返回n!,使用递归。你认为我需要在这里使用它并打印它,而不是计算温度(n!)然后打印出来? 谢谢
# 1 楼答案
你写的东西是有效的,但是你正在重新计算一堆东西,你仍然在使用
for
循环,当你可以用更少的代码递归地完成整个事情时假设您无法使用函数
Print(int n)
,那么您可以编写更少的代码,只需通过从1
向上递归并携带计算来计算每个阶乘一次:这更容易阅读,更容易推理,并避免重复同样的计算
在我上面发布的示例中,我正在进行
n
乘法。在你的例子中,你在做大约n^2 / 2
的乘法,因为你一次又一次地迭代每个数字(例如:1*2*3*..*50,然后1*2*3*..*49,然后1*2*3*..*48等等)为了简洁起见,我编写的代码省略了错误检查,因为您可以简单地向其中添加输入健全性检查
# 2 楼答案
使用递归获得一个数字的阶乘(上一个练习),这个方法看起来像
考虑到这一点,最好不要使用递归,而是使用循环来获得数字的阶乘,如下所示:
如果你想要系列中的所有数字
如果只需要打印它们,则该方法将变为
# 3 楼答案
下面是一个简单的递归解决方案: