日撸java 三百行 (day 08 )递归

递归:程序调用自己,通过不断将问题分解,将问题规模逐步减小、分解为简单容易处理的情况。

递归有两个过程:递去与归来。递去的过程不断分解问题规模直到到达临界位置后开始归来,返回到原点。解决问题时,可以在递的过程中解决,也可以在归的过程中解决。

  • 案列一 递归求和
    /**
     *********************
     * 递归求和
     *
     * @param paraValue
     *            传入参数.
     * @return The sum.
     *********************
     */


    public static int SumToN(int paraValue){
        if(paraValue<=0){
            return 0;
        } // of if

        return SumToN(paraValue-1)+paraValue;
    } //of SumToN

输入为5的递去过程图:

  • 案列二 斐波那契数列(递归) 
    /**
     *********************
     * 斐波拉契数列(递归)
     *
     * @param paraN
     *            传入参数.
     * @return The sum.
     *********************
     */


    public static int fibonacci(int paraN){
        if(paraN<=0){
            return 0;
        }// of if
        if(paraN==1){
            return 1;
        } //of if
        return fibonacci(paraN-1)+fibonacci(paraN-2);
    } // of fibonacci

 

 红色箭头为递归一,蓝色箭头为递归二,程序先走完递归一才能走递归二。

  • 案列三 斐波拉契数列(迭代)
    /**
     *********************
     * 斐波拉契数列(迭代)
     *
     * @param paraN
     *           输入的参数.
     * @return The sum.
     *********************
     */

    public static int fibonacciV2(int paraN){
        int first=1,second=1,tempresult=0;
        if(paraN<=2){
            return first;
        } // of if
        for(int i=2;i<paraN;++i){
           tempresult=first+second;
           first=second;
           second=tempresult;
        } // of for i
        return tempresult;
    } // of fibonacciV2

 

 主函数:

    /**
     *********************
     * 程序入口.
     *
     * @param args
     *            暂未使用.
     *********************
     */
    public static void main(String args[]) {
        int tempValue = 5;
        System.out.println("0 sum to " + tempValue + " = " + SumToN(tempValue));
        tempValue = -1;
        System.out.println("0 sum to " + tempValue + " = " + SumToN(tempValue));

        for(int i = 0; i < 10; i ++) {
            System.out.println("Fibonacci " + i + ": " + fibonacci(i));
        }//Of for i
    }// Of main
}// Of class day08_Recursion

运行效果:

总结:递归这东西虽然代码少,但是很容易绕进去,画图分析要好理解一些。想要正确正确的递归:首先必须明确递归的终止条件(防止无限递归),其次给出处理递归终止时的办法(只有这个地方写好了才能到达预期),要想写好这两个部分还是得多练。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值