递归:累加求和,累积求和,斐波那契疏忽列

本文介绍了递归的基本概念,包括递归调用与终止条件,以及递归在内存中的工作原理。讨论了递归的优缺点,适用场景,并给出了二叉树遍历、文件复制、字符回文判断、全排列问题等实例。同时,对比了递归与迭代的适用情况,强调递归在解决问题时的简洁性,但也指出其效率和内存消耗的问题。
摘要由CSDN通过智能技术生成

递归
递归(recursion )是指在定义自身的同时又出现了对自身的引用。
如果一个算法直接或间接地调用自己,则称这个算法是一个递归算法。
任何一个有意义的递归算法总是由两部分组成:递归调用与递归终止条件。

      

德罗斯特效应(Droste effect)是递归的一种视觉形式,是指一张图片的某个部分与整张图片相同,如此产生无限循环。这种图片可以通过名为 Mathmap的数学软件制作出来

注意:其实上面不是递归,递归不是无限循环。递归有去有回,上图有去无回。

示例1:1+2+3+4......+100=?
	算法1:循环算法
		int sum = 0;
		for(int i=1;i<=100;i++){
			sum += i;
		}
		System.out.println(sum);
		时间复杂度T(n) =O(n)
		空间复杂度S(n) =O(1)

	算法2:简单算法
		System.out.println((1+100)*100/2);
		System.out.println(100*101/2);//0+1+2+..100=?

		时间复杂度T(n) =O(1)
		空间复杂度S(n) =O(1)

	算法3:递归算法
		sum(100) = sum(99) + 100
		sum(99) = sum(98) + 99
		...
		sum(3) = sum(2) + 3;
		sum(2) = sum(1) +2;
		sum(1) = 1;

	public static  int sum(int n){
		if(n>1){
			return sum(n-1)+n;
		}else{
			return 1;
		}
	}

		时间复杂度T(n) =O(n)
		空间复杂度S(n) =O(n)


    总结
      1.递归的调用过程
    每递归调用一次方法,都会在内存中分配空间
    每执行完一次方法,都会释放相应的空间
  2.递归的优缺点
      缺点:占用内存多,效率低下
     优点:思路和代码简单
  3.递归的适用场合
      1.一个问题可被分解为若干层简单的子问题 
      2.子问题和其上层问题的解决方案一致
    3.外层问题的解决依赖于子问题的解决
    4.一定要有递归的结束条件* 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值