递归简论

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

模拟数学函数 公式为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);
    }

 

posted @ 2018-04-27 21:54  陈东的博客  阅读(192)  评论(0编辑  收藏  举报