java中的递归结构

递归和循环的一些思考


递归结构:递归体+递归头,递归也是循环的一种,不同的是每次循环的结果作为下一次循环的基础数据使用。核心思维是“自己调用自己”,我个人目前理解为,java中方法的自调用并设定调用结束点(递归头)。
递归头:相当于while循环判断条件的布尔表达式,用于终止循环
递归体:具体的计算方式或者说语句处理方式
eg:1+2+。。+100的和

			```
			//用循环的方式为:1到100循环累加很简单,如下:
			int sum = 0;
			for(int i=1;i<101;i++){//结束点:i=101
					sum += i;
				}
			//用递归的方式为:
			```
			int recursionPlus(int num){//用return控制结束
				if(num == 0) {//递归头,结束点,num=0,既可以做递归最后一次执行的点
					return  num;
				}else {
					return  num+recursionPlus(--num);//递归体,用于计算方式的编写
				}
			}
	```

如题:

  1. 从键盘输入某个十进制整数数,转换成对应的二进制整数并输出。

  2. 编程求:∑1+∑2+……+∑100。

  3. 编写递归算法程序:一列数的规则如下: 1、1、2、3、5、8、13、21、34… 求数列的第40位数是多少。


public class TestLoopAndRecursion {

	public static void main(String[] args) {
		
		//第一题
		//10进制转二进制
		System.out.println(decimalTransformBinary(21));
		System.out.println(Integer.toBinaryString(21));
		System.out.println(decimalTransformBinary(0));
		System.out.println(Integer.toBinaryString(0));
		System.out.println(decimalTransformBinary(1));
		System.out.println(Integer.toBinaryString(1));
		System.out.println();
		System.out.println(decimalTransformBinary(-1));//?
		System.out.println(Integer.toBinaryString(-1));
		
		//第二题
		System.out.println(recursionPlusChilds(100));//计算100的累和
		System.out.println(recursionPlusFather(100));//计算1-100每个数字的累和
		//System.out.println(recursionPlusFather(-100));//堆栈溢出
		System.out.println(loopPlus(100));//循环方式计算1-100每个数字的累和
		
		
		//第三题
		System.out.println(recursionSequence(1));
		System.out.println(recursionSequence(2));
		System.out.println(recursionSequence(3));
		System.out.println(recursionSequence(4));
		System.out.println(recursionSequence(5));
		System.out.println(recursionSequence(6));
		System.out.println(recursionSequence(40));
		
	}
	
	static String decimalTransformBinary(int num) {
		String str = "";
		int temp;//余数
		if(num == 0) {
			str = "0";
		}
		while(num != 0) {
			temp = num % 2;
			str = (temp==0?0:1) + str;//整除时加0,非整除加1
			num = num /2;
		}
		return str;
		
	}
	
	static int recursionPlusFather(int num) {//递归实际就是方法自调用,父级每个数字的从一的累加和
		if(num == 0) {//递归头,结束标识
			return num;
		}else {
			return recursionPlusChilds(num)+recursionPlusFather(--num);//递归体,用于计算方式的编写
		}
	}
	static int recursionPlusChilds(int num) {//递归实际就是方法自调用,单个数字的从一的累加和
		if(num == 0) {//递归头,结束标识
			return num;
		}else {
			return num+recursionPlusChilds(--num);//递归体,用于计算方式的编写
		}
	}
	static int loopPlus(int num) {//循环方式
		int result = 0;
		for (int i = 1; i <= num; i++) {
			int j = i;
			while(j>0) {
				result += j;
				j--;
			}
		}
		return result;
	}
	
	static int recursionSequence(int position) {
		
		if(position == 1 || position == 2) {
			return 1;
		}else {
			return recursionSequence(position-1)+recursionSequence(position-2);
		}
	}
}

发布了37 篇原创文章 · 获赞 29 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_42755868/article/details/90715000