zoukankan      html  css  js  c++  java
  • 递归简论

    我们熟悉的大多数数学函数都是由一个简单的公式来描述的,

    模拟数学函数 公式为f(X)= 2f(x-1)+x*x
    * 我们在非负整数集上定义一个函数f,它满足f(0)= 0;并且满足上述公式;
    * 我们就可以根据上述公式定义一个函数 当一个函数 用它自己来定义时 就称之为递归函数
     //可以使用递归的地方一定要满足几种条件
        //不可以在调用自己的时候 陷入死循环 而且在调用自身的时候 一定有某些时候 可以不需要调用递归就能算出值
        //也就是下面的函数 当x == 0的时候直接返回 0 否则陷入无限次的循环 就永远不会有结果
        //并且 函数要不断的向 着 不需要调用递归就能算出结果的条件逐渐的推进 才可以使用递归
    
        public int f(int x){
            if(x==0)
                return 0;
            else
            return 2*f(x-1) + x*x;
        }
    
        @Test
        public void testf(){
            System.out.println(f(8));
        }
        /**
         * 那么这次使用递归  来练习一下
         * 现在假设 一个正整数n 并希望把它打印出来,我们的的例程名字叫做 printOut(N),假设现在仅有的例程
         * printDigit(n)每次只可以打印单个数字到终端,
         * 那么我们想打印76234 要怎么打印呢
         * 我们来分析一下  假设 这个正整数有k位数字 我们完全可以用 这个正整数 去%10 取余 来获得,那么这个正整数去掉最后一位
         * 用什么来表示呢 用n/10来表示;
         * 所以根据上述分析我们来编写递归函数,
         * 实现递归的两个必要条件
         * 1 有基准情形 也就是不需要通过递归就可以算出结果的
         *  也就是在我们打印的是一个单个整数的时候 我们直接使用printDigit来打印就可以了
         *
         * 2 不断向基准情形推进 在个数大于1的时候 去掉最后一位数的前几位怎么表示 n/10 然后不断的去掉最后一位 一直到只剩一位
         * 所以递归方法体里的内容就是 先取这个正整数的去掉最低位数的所有数字 在 去掉并且打印最后一位;
         *
         */
        public void printOut(int n){
            if(n>=10)
                printOut(n/10);
                printDigit(n%10);
    
        }
        public void printDigit(int x){
            System.out.print(x);
        }
        @Test
        public void testPrintOut(){
            printOut(76234);
        }
  • 相关阅读:
    盘子序列
    最大矩形面积
    【模板】ST表
    排队
    map循环遍历
    vue循环遍历给div添加id
    正则 匹配
    字符串拼接
    js对象追加到数组里
    二级标题左侧加粗线条
  • 原文地址:https://www.cnblogs.com/ChenD/p/8964733.html
Copyright © 2011-2022 走看看