在递归斐波纳契程序中,为什么左子树在右子树之前被调用(类似于后序遍历)?(In recursive fibonacci program why the left subtree is called b

编程入门 行业动态 更新时间:2024-10-26 12:27:26
在递归斐波纳契程序中,为什么左子树在右子树之前被调用(类似于后序遍历)?(In recursive fibonacci program why the left subtree is called before the right one(something like postorder traversal)?) package fibonacci; public class Fib { static int fib(int n) { System.out.println("fib(" + n + ") called"); if(n<=1) { return n; } int temp = fib(n-1) + fib(n-2); System.out.println("returning to fib(" + n +")" ); return temp; } public static void main(String[] args) { System.out.println("fib(5): " + fib(5)); } }

输出:

fib(5)叫 fib(4)叫 fib(3)叫 fib(2)叫 fib(1)叫 fib(0)叫 回到fib(2) fib(1)叫 回到fib(3) fib(2)叫 fib(1)叫 fib(0)叫 回到fib(2) 回到fib(4) fib(3)叫 fib(2)叫 fib(1)叫 fib(0)叫 回到fib(2) fib(1)叫 回到fib(3) 回到fib(5) fib(5):5

PS:为什么在fib(n-2)之前调用fib(n-1)?

package fibonacci; public class Fib { static int fib(int n) { System.out.println("fib(" + n + ") called"); if(n<=1) { return n; } int temp = fib(n-1) + fib(n-2); System.out.println("returning to fib(" + n +")" ); return temp; } public static void main(String[] args) { System.out.println("fib(5): " + fib(5)); } }

Output:

fib(5) called fib(4) called fib(3) called fib(2) called fib(1) called fib(0) called returning to fib(2) fib(1) called returning to fib(3) fib(2) called fib(1) called fib(0) called returning to fib(2) returning to fib(4) fib(3) called fib(2) called fib(1) called fib(0) called returning to fib(2) fib(1) called returning to fib(3) returning to fib(5) fib(5): 5

PS: Why fib(n-1) is called before fib(n-2)?

最满意答案

这可以通过以下JLS部分来解释 -

Java编程语言保证运算符的操作数似乎以特定的评估顺序进行评估,即从左到右。

在您的情况下,左操作数是对fib(n-1)的调用,因此将对其进行全面计算以计算最终值,然后才会评估正确的操作。

This can be explained by the following section of JLS -

The Java programming language guarantees that the operands of operators appear to be evaluated in a specific evaluation order, namely, from left to right.

In your case, the left operand is the call to fib(n-1), so it will be fully evaluated to compute final value, and only then the right operation will be evaluated.

更多推荐

本文发布于:2023-07-26 17:45:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1278872.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:子树   递归   遍历   类似于   程序

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!