经典递归算法

本文分享了几种经典的递归算法案例,包括兔子繁殖问题、求和、阶乘、斐波那契数列、汉诺塔问题、台阶走法、以及最大公约数等。通过这些实例,帮助读者理解递归的基本原理及其应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

程序调用自身的编程技巧称为递归。

今天分享几个经典递归算法,也算是做一个整理记录。

   /**
	 * 3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个    
     * 月的兔子总数为多少?
	 */
	public static int rabbit(int x){
		if (x == 1 || x ==2) {
			return 1;
		} else {
			return rabbit(x - 1) + rabbit(x -2);
		}
	}
	
	/**
	 * 从1到100相加
	 */
	public static int sum(int i) {
		if (i == 1) {
			return 1;
		} else {
			return i + sum(i - 1);
		}
	}
	
	/**
	 * 从1到100阶乘
	 */
	public static BigInteger sum_1(int i) {
		if (i == 1) {
			return BigInteger.ONE;
		} else {
			return BigInteger.valueOf(i).multiply(sum_1(i - 1));
		}
	}
	
	/**
	 * 一列数的规则如下: 1、1、2、3、5、8、13、21、34 ,求第30位数是多少?使用递归实现
	 */
	public static int test (int i) {
		if (i < 2) {
			return 1;
		} else {
			return test(i - 1) + test(i - 2);
		}
	}
	
	/**
	 * 汉诺塔问题
	 */
	public static void hanio (int n, char a, char b, char c) {
		if (n == 1) {
			System.out.println("移动"+n+"号盘子从"+a+"到"+c);
		} else {
			hanio(n - 1, a, c, b);
			System.out.println("移动"+n+"号盘子从"+a+"到"+c);
			hanio(n - 1, b, a, c);
		}
	}
	
	/**
	 * n阶台阶,一次走一步或两步,有多少种走法?
	 */
	public static int findStep (int i) {
		if (i == 0 || i == 1 || i == 2) {
			return i;
		} else {
			return findStep(i - 1) + findStep(i - 2);
		}
	}
	
	/**
	 * 求最大公约数
	 */
	public static long gcd (long m, long n) {
		while (n != 0) {
			long rem = m % n;
			m = n;
			n = rem;
		}
		return m;
	}
	
	/**
	 *  二分查找
	 * @param srcArray 有序数组
	 * @param start 数组开始位置
	 * @param end   数组结束位置
	 * @param key   查找的key
	 * @return
	 */
	public static int binSearch (int srcArray[], int start, int end, int key) {
		int min = (end - start) / 2 + start;
		if (start >= end) {
			return -1;
		} else if (key > srcArray[min]) {
			return binSearch(srcArray, min + 1, end, key);
		} else if (key < srcArray[min]) {
			return binSearch(srcArray, start, min -1, key);
		}
		return -1;
	}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值