递归中的递归与变量分类

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
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值