递归

递归优点:代码简单 代码量少
递归缺点:不易理解

用递归解决问题时,主要思路:
1.将一个大问题分解成子问题
2.子问题除了问题规模会变小,和原问题解决的思路是一样的,即调用函数本身解决子问题
3.要存在一个临界值使得循环可以停止

下面列举几个例子:

1.求阶乘

public class TestDemo {
   //递归求阶乘 	
	public static int fac(int n) {
        	int tmp = 1;
        	if(n == 1) {
            	tmp = 1;
            	return tmp;
        	} else {
            	tmp = fac2(n-1)*n;
            	return tmp;
        	}
    	}
    
 	public static void main(String[] args) {
        	System.out.println(fac(5));//120        	     
    	}
	}

在fac()方法中,每次的tmp值都是当前n值和fac(n-1)的值相乘进行循环,而当n=1,即趋于某个临界值,就会有数值返回,最后可以得到要求的结果

2.斐波那契数列求和的递归

public static int fibSum(int n) {
        if (n <= 0) {
            return -1;
        }
        int sum = 1;
        if (n == 1) {
            return sum;
        } else if (n == 2) {
            return ++sum;
        } else {
            sum = sum + (fibSum(n - 1) + fibSum(n - 2));
            return sum;
        }
    }

3.二分法求值的递归

public static int binarySearch(int array[], int left, int right, int key) {
        int mid = (left + right) >> 1;
        if (left <= right) {
            if (key == array[mid]) {
                return mid;
            } else if (key > array[mid]) {
                return binarySearch(array, mid + 1, right, key);
            } else {
                return binarySearch(array, left, mid - 1, key);
            }
        }
        return -1;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值