当前位置:编程学习 > JAVA >>

方法内调用方法,不知道你见过没

import java.util.*;

public class StackTraceTest
{
public static int factorial(int n)
{
System.out.println("factorial("+ n +"):");
Throwable t = new Throwable();
StackTraceElement [] frames = t.getStackTrace();//这几个看不懂啥意思
for(StackTraceElement f : frames)//这几个看不懂啥意思
System.out.println(f);//这几个看不懂啥意思
int r;
if(n <= 1) r =1;
else 
{
System.out.println(n);
r =n * factorial(n - 1);//方法又调用方法,factorial(n - 1)这里的值应该是int型呀,可是输出结果却像个循环的,真得很乱
}
System.out.println("return " + r);

return r;
}
public static void main(String [] args)
{
Scanner in = new Scanner(System.in);
System.out.print("Enter n:");
int n = in.nextInt();
System.out.println(factorial(n));
}
}
--------------------编程问答-------------------- 递归没学过吗,楼主,应该好好补补大学计算机课程 --------------------编程问答-------------------- 这个是递归方法。 --------------------编程问答-------------------- t.getStackTrace();返回的是一个 StackTraceElement类型的数组对象,
for(StackTraceElement f : frames) 这是foreach的写法,迭代数组对象的所有元素,

 factorial(n)方法调用了factorial(n - 1),类推 factorial(n - 1)调用了 factorial(n - 2)...
一直到n<=1时,这个递归程序找到了出口,再一个一个返回,  factorial(1), factorial(2)... factorial(n),最后出结果.
以前我对递归也很糊涂,你可以去看看数据结构. --------------------编程问答-------------------- 很常见的递归算法。 --------------------编程问答-------------------- 递归都不知道~
补充:Java ,  Java SE
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,