谈谈谈递归

小老弟 最近准备温习算法。之前垃圾的算法只是可算时要被重新提起(里面有一个错别字 是找到 我转红包哦  限一个人)哈哈

结合前辈们的讲解 我尝试发表一下拙见  欢迎大家补充

--------------------- 参考资料 ==========感谢以下作者 如有侵权 请联系我=====

原文:https://blog.csdn.net/ten_sory/article/details/64126341 

 

     https://blog.csdn.net/ikownyou/article/details/65633581

递归两个要素

1.递归边界

2.递归的逻辑——递归"公式"

递归的过程一定有参数的变化,并且参数的变化,和递归边界有关系.

在难度较大的题目中,这两者均不容易直接得到.

递归的种种问题,也许理解的同学可能可以用一句话解释清楚,但是不理解的同学再怎么说也没办法理解.

下面通过几个简单的例子【体会】一下递归,先从【感性】的角度理解递归.

先摆上例子
1.递归求和1+2+3+.....+n

public static Integer recursionSum(Integer n){
   if(n>0){
      return n+recursionSum(n-1);
   }else{
      return 0;
   }
}
2.递归阶乘n! = n * (n-1) * (n-2) * ...* 1(n>0)

public static Integer recursionMulity(Integer n){
   if(n==1){
      return 1;
   }
   return n*recursionMulity(n-1);
}
3.河内塔问题

package arithmeticDesign;
//汉罗塔的设计
import java.util.Scanner;

public class TowerOfHanoi {
    static int count=1;//用来记录生成步骤的条数
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner s=new Scanner(System.in);
        int n=s.nextInt();
        move(n,"A","B","C");
    }
    /**
     * 将n个盘子从A移到B,C作为辅助的柱子
     * @param n 原来有多少个盘
     * @param A 原来放置盘子的柱子
     * @param B B柱子
     * @param C C柱子
     */
    public static void move(int n,String A,String B,String C) {
        if(n==1){
            System.out.println("第"+count+++"步:"+"将第1个盘从"+A+"移到"+B);
        }
            else{
            move(n-1,A,C,B);
            System.out.println("第"+count+++"步:"+"将第"+n+"个盘从"+A+"移到"+B);
            move(n-1,C,B,A);
        }
    };
}

4.判定一系列字符串中是否有相同的内容


public static boolean fun(int n,String[] a){
   boolean b = false;
   if(n == a.length){
      b = true;
   }else{
      for(int i = n; i < a.length-1; i++){
         System.out.println(n+"    "+(i+1));
         if(a[n].equals(a[i+1])){
            return false;
         }
      }
      n++;
      fun(n,a);
   }
   return b;
}

//总结 关键两个!!!!1 找到能够让递归函数返回的条件 2 分治法 每层逻辑(调用自身即可)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值