递归中的递归与变量分类

来源:互联网 发布:lol网络不稳已断开连接 编辑:程序博客网 时间:2024/05/17 06:06
package 一般情况;/** * 昨天笔试时碰到了这个问题,当时已经想到了怎么解决的,但是没时间了: * 不能用循环和本地变量(就是局部变量),对一个整形n,实现输出n,2n,4n,... * 当大于max(比如5000)时再逆向输出...4n,2n,n。 * 解决方法:用两个递归+成员变量搞定! *  * 这几天关于这个问题不同人有不同解法,但是不少人(包括我)对变量分类理解很模糊~ * 我翻了一下Java疯狂讲义终于明白了! * 在Java中,根据定义变量位置的不同,将变量分为两大类——成员变量和局部变量 * 成员变量:实例变量(即类中不以static修饰的变量)、类属性(即类中以static修饰的变量)。 * 局部变量:形参、方法里定义的变量、代码块中定义的变量(静态或非静态代码块都是)。 * 所以,这下知道这道题的意思了吧? * @author 炜sama * */public class 递归中的递归与变量分类 {static final int n=8;static int sum=n;static int max=5000;public static void printMul(){//乘以2递归System.out.println(sum);if (2*sum>max) //递归终点,进入另一个递归printDiv();else {sum*=2;printMul();}}public static void printDiv(){//除以2递归System.out.println(sum);if (sum!=n){//不符合这个条件的话就是递归终点了~sum/=2;printDiv();}}//其实还有一个递归可以解决的方法!这是小黑大神的解法:public static void print(){System.out.println(sum);if (2*sum<max){sum*=2;print();}System.out.println(sum);sum/=2;}//如果可以使用本地变量那就简单得多啦~public static void show(int n,int max){if (n<=max) {System.out.println(n);show(n*2,max);System.out.println(n);}}public static void main(String[] args) {//printMul();//符合题目要求的解法print();//show(8,5000);}}

0 0
原创粉丝点击