day16

Day16 —— 递归

1. Background

今天是学习java的第十六天,今天学习的是递归。

递归虽然有点难以理解,但是今天所练习的求和以及斐波那契数列是学任何一门编程语言都必练的过程。所以这两个函数该怎么写,我早已烂熟于心。

2. Description

以此类推是递归的基本思想。

我的理解是大事化小,小事化了。解决一个事情很难,但是把它分摊到无数个小项目上面那难度就显著下降了。

递归的两个条件

  1. 可以通过递归调用来缩小问题规模,且新问题与原问题有着相同的形式。(自身调用)
  2. 存在一种简单情境,可以使递归在简单情境下退出。(递归出口)

递归三要素:

  1. 一定有一种可以退出程序的情况;
  2. 总是在尝试将一个问题化简到更小的规模
  3. 父问题与子问题不能有重叠的部分

3. Code

package datastructure;

/**
 * 递归,一个调用自己的方法。系统会自动分配一个栈给它。
 * 
 * @author Leo Liu lyx1443807042@qq.com
 */

public class Recursion {
    /**
     *************
     * Sum to N. No loop.
     * @param paraN The given value.
     * @return The sum.
     *************
     */
    public static int sumToN(int paraN) {
        if (paraN <= 0) {
            return 0;
        } // Of if

        return sumToN(paraN - 1) + paraN;
    } // Of sumToN

    /**
     *************
     * 斐波那契数列,每个数等于前两数之和。
     * @param paraN The given value.
     * @return The sum.
     *************
     */
    public static int fibonacii(int paraN) {
        if (paraN <= 0) {
            return 0;
        }
        if (paraN == 1) {
            return 1;
        }

        return fibonacii(paraN - 1) + fibonacii(paraN - 2);
    }

    /**
     * The entrance of program.
     * 
     * @param args Not sued now.
     */
    public static void main(String[] args) {
        // sumToN testing.
        int tempNum = 5;
        System.out.println("0 sum to " + tempNum + " = " + sumToN(tempNum));

        tempNum = -1;
        System.out.println("0 sum to " + tempNum + " = " + sumToN(tempNum));

        // fibonacii testing
        for (int i = 0; i < 10; i++) {
            System.out.println("Fibonacii " + i + ": " + fibonacii(i));
        }
    }


}

运行结果:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值