在Java中尝试使用FizzBuzz递归解决方案返回带有n次迭代的字符串列表 . 例如,n = 4应输出[“1”,“2”,“Fizz”,4] . 但是,使用我当前的代码,输出只是[“4”] . 为什么我的解决方案没有执行递归函数?任何其他批评都表示赞赏!
class Solution {
public List<String> fizzBuzz(int n) {
//create variable to return list of strings
List<String> fbList = new ArrayList<String>();
//base case 1
if(n == 0){
fbList.add(Integer.toString(0));
}
//base case 2
else if(n == 1){
fbList.add(Integer.toString(1));
}
//OW take n and begin reducing recursively from, n - 1
else{
if(n % 3 == 0){
fbList.add("Fizz");
}
else if(n % 5 == 0){
fbList.add("Buzz");
}
else if((n % 3 == 0) && (n % 5 == 0)){
fbList.add("FizzBuzz");
}
else{
fbList.add(Integer.toString(n));
}
//recursive function call
fizzBuzz(n - 1);
}
return fbList;
}
}
2 回答
使用递归时,请考虑简单,即让递归完成工作 . 如果您的递归正在倒计时,但您希望列表以升序形式出现,请先添加其他所有内容,然后添加您正在处理的内容:
OUTPUT
问题是每次递归调用都会创建一个新的
List
. 您返回列表但是:您忽略了递归调用的返回值 . 要解决此问题,您可以:
这将使用方法addAll添加递归调用返回的所有元素 . 返回:
你
if/else if/else
链也出了故障 .if((n % 3 == 0) && (n % 5 == 0))
应该在if(n % 3 == 0)
和if(n % 5 == 0)
之前 . 否则它将始终输入if(n % 5 == 0)
或if(n % 3 == 0)
: