关于递归详解!!(不会打我)

打印 上一主题 下一主题

主题 903|帖子 903|积分 2709

递归


  • 递归就是自己调用自己!
  • 递归的意思就是不停的调用自己,但是我们要知道的是我们的计算机资源是有限的,一般来说递归的层数不能太深。
递归主要包含两个部分:递归头和递归体


  • 递归头:什么时候不调用自身方法。如果没有,将陷入死循环。
  • 递归体:什么时候需要调用自身方法。
举个例子:
我们用阶乘来测试一下递归:
  1. public class Demo06 {
  2.     public static void main(String[] args) {
  3.         //阶乘  eg:4的阶乘,就是4!=4*3*2*1
  4.         System.out.println(j(5));
  5.     }
  6.     public static int j(int n){
  7.         if (n==1){
  8.             return 1;
  9.         }else {
  10.             return n*j(n-1);
  11.         }
  12.     }
  13. }
复制代码
解析:可以看出我们是要求一个4的阶乘,下面写了一个方法来求阶乘,方法里面有一个int类型的参数n。当n为4的时候不满足if语句那么就执行else中的语句,返回一个n*f(n-1),也就是4f(3),再把3带入这个方法,就变成4×3×2f(2),,最后当n==1时,满足上面if的条件,返回结果为120
输出:
  1. 120
复制代码
练习:写一个简单的计算器程序
要求:

  • 写4个方法:加减乘除
  • 利用循环+switch进行用户交互
  • 传递需要操作的两个数
  • 输出结果
  1. public class Demo07 {
  2.     public static void main(String[] args) {
  3.         x();
  4.     }
  5.     public static double x(){
  6.         Scanner sc=new Scanner(System.in);
  7.         System.out.println("请输入要计算的第一个数:");
  8.         double m=sc.nextDouble();
  9.         System.out.println("输入要执行的运算符号(+、-、*、/)中的一个");
  10.         String k=sc.next();
  11.         System.out.println("输入第二个数进行计算:");
  12.         double n=sc.nextDouble();
  13.         switch (k){
  14.             case"+":
  15.                 System.out.println(plus(m,n));
  16.                 break;
  17.             case "-":
  18.                 System.out.println(subtract(m,n));
  19.                 break;
  20.             case "*":
  21.                 System.out.println(multiply(m,n));
  22.                 break;
  23.             case "/":
  24.                 System.out.println(divide(m,n));
  25.                 break;
  26.             default:
  27.                 System.out.println("您输入的运算符有误");
  28.         }
  29.         return 0;
  30.     }
  31.     //编写四个方法,等
  32.     public static double plus(double m,double n){
  33.         return m+n;
  34.     };
  35.     public static double subtract(double m,double n){
  36.         return m-n;
  37.     };
  38.     public static double multiply(double m,double n){
  39.         return m*n;
  40.     };
  41.     public static double divide(double m,double n){
  42.         return m/n;
  43.     };
  44. }
复制代码
输入数字进行测试:
  1. 请输入要计算的第一个数:
  2. 5
  3. 输入要执行的运算符号(+、-、*、/)中的一个
  4. /
  5. 输入第二个数进行计算:
  6. 5
  7. 1.0
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

络腮胡菲菲

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表