如何打印斐波那契递归调用结果以匹配指定输出格式?
修正后的递归斐波那契函数实现
你的代码存在两个关键问题:
- 重复调用了两次
recFib(n-1) + recFib(n-2),不仅造成计算冗余,还会打乱输出顺序 - 打印语句的位置未匹配递归的执行流程
以下是符合要求的代码,仅使用一个打印语句即可得到指定输出:
public class Test { public static void main(String[] args) { Fibonacci fib = new Fibonacci(); System.out.println("Rec results is "); fib.recFib(5); } } class Fibonacci { public int recFib(int n){ if(n <= 1) { // 处理基准情况:先打印当前n的结果,再返回 System.out.println("Fib("+ n +") is: " + n); return n; } else { // 先递归计算n-1和n-2的结果,避免重复调用 int left = recFib(n - 1); int right = recFib(n - 2); int result = left + right; // 得到当前n的结果后打印 System.out.println("Fib("+ n +") is: " + result); return result; } } }
执行逻辑说明:
- 基准情况(n≤1):当递归到n=1或n=0时,直接打印当前值并返回,对应输出开头的
Fib(1) is: 1和Fib(0) is: 0。 - 递归计算流程:对于n>1的情况,先完整执行
recFib(n-1)的所有递归分支(包含该分支下的所有打印操作),再执行recFib(n-2)的所有分支,最后得到当前n的结果并打印,完全匹配目标输出的顺序。 - 避免冗余计算:用变量
left和right存储递归结果,避免原代码中重复调用递归方法导致的额外计算和混乱打印。
内容的提问来源于stack exchange,提问作者nate998
相关产品推荐
相关产品推荐

