【Java笔记】——有趣的递归算法

在Java学习开始就学习到了递归,以前经常听到递归,但是却没有真正的了解过递归。学习是不断的重复的,在最初的时候,自己所听说到的不了解的,以后肯定会学到。但是前期这个了解的阶段是不可少的,现在体会是越来越深了。这篇博客就简单介绍一下递归算法,首先介绍什么是递归,然后是递归算法的代码展示,最后呈现递归的结果。

什么是递归

定义

递归是自身调用的一种编程技巧,递归作为一种算法在程序设计语言中广泛应用。

优点

一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序,就可描述出解题过程所需要的多次重复计算,大大的减少了程序的代码量。

特点

递归需要有边界条件、递归前进段和递归返回段,当边界条件符合时,递归前进;边界条件不符合时,递归返回。

代码展示

斐波那契数列是典型的递归实现,即1,1,2,3,5,8,13,21……,就是说前一个数加上这个数等于下一个数的值。用递归算法计算哪个位置上的值是什么,代码展示如下:

<span style="font-family:KaiTi_GB2312;font-size:18px;">public class Fibonacci{
	public static void main(String arg[]){
		System.out.println(f(40));
	}

	public static int f(int n){
		if(n==1 || n==2){   //如果在第一和第二个位置,则返回1
			return 1;
		} else {       //如果在其他位置则是要n-1位置上的值加上n-2位置上的值得到n位置上的值
			return f(n-1)+f(n-2);	 //也就是前两个位置的值和前一个位置的值的和得到这个位置的值
		}	

	}
}</span>

在Fibonacci类中有一个方法f,它有一个参数是int  n,n代表的是数列的位置,也就是第几个数,然后这个方法是计算在这个位置上的数的值是多少。然后有一个main方法,传入一个参数就可以计算该位置上的值。这个方法的计算方式就如注释中所示,也就是前两个位置的值和前一个位置的值的和得到这个位置的值。

递归结果

首先计算一个简单的验证一下,我输入的n为5,看输出结果,在该数列的第五个位置的值就是5,说明方法是正确的。

下面就来介绍一下第40位上面的值,结果为102334155.

总结

递归的关键就是要有边界条件,然后进行自身调用,就是说自身调用自身方法,但是不能无限制。学习一个过程,从不了解到了解,从不认识到认识,这个过程就是在一直经历。从开始的时候只是听说递归,到现在真正了解到递归,才发现其实并不是什么都像自己想的那么难,只要了解了原理,自然就都不是问题了。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-12-12 14:56:32

【Java笔记】——有趣的递归算法的相关文章

JAVA 笔记(二)

关于interface值得被了解的东西 当我们最初开始接触编程的时候,都会听到类似,你可以使用这个API,使用那个API 类似的说法. 没错,API就是说Application Programming Interface,也就是应用程序编程接口. 但对应到Java里来说,初学乍练之时可能会造成一定的疑惑.因为,大部分时间来说, 你发现在使用的不是别人的工具类(class)里的方法,但是Java里的接口,不是说用interface定义的吗? 要解开这个误区,我们先来看一看所谓的API到底指的是什么

Java 笔记(四) RTTI - 运行时类型检查

运行时类型检查,即Run-time Type Identification.这是Java语言里一个很强大的机制,那么它到底给我们的程序带来了什么样的好处呢? 在了解运行时类型检查之前,我们要首先知道另一个密切相关的概念,即运行时类型信息(Run-time Information - 也可以缩写为RTTI) 运行时类型信息使得你可以在程序运行时发现和使用类型信息. 来自:<Thinking in Java>. OK,那么我们总结来说,RTTI就是能够让我们在程序的运行时去获取类型的信息.接下来我

15.1-全栈Java笔记:Java事件模型是什么?事件控制的过程有哪几步??

应用前边两节上一章节的内容,大家可以完成一个简单的界面,但是没有任何的功能,界面完全是静态的,如果要实现具体功能的话,必须要学习事件模型. 事件模型简介及常见事件模型 对于采用了图形用户界面的程序来说,事件控制是非常重要的. 一个源(事件源)产生一个事件并把它(事件对象)送到一个或多个监听器那里,监听器只是简单地等待,直到它收到一个事件,一旦事件被接收,监听器将处理这些事件. 一个事件源必须注册监听器以便监听器可以接收关于一个特定事件的通知. 每种类型的事件都有其自己的注册方法,一般形式为: v

13.1-全栈Java笔记:打飞机游戏实战项目|AWT技术|MyGameFrame

简介和项目目标 通过游戏项目学习整个Java基础知识体系,我们做了精心的设计,让每一章知识都能获得应用. 比如:多线程用来实现动画效果.容器实现对于多发炮弹的存取和处理.常用类等等的应用. 寓教于乐,让大家迅速入门,更希望通过喜闻乐见的小游戏,让大家爱上编程,爱上"程序员". 老鸟建议 很多朋友会疑惑:"游戏项目,又不能拿到企业面试中,为什么要讲?" 这是一种太过于功利的想法.就像,我们说:"今天吃个馒头,又不是长高,为什么要吃呢?" 游戏项目的

Java笔记---部署 JavaWeb 项目到云服务器

一.前言 前面我们已经尝过了在云服务器上部署代码的甜头了,现在主菜就要上场了,那就是将我们的 JavaWeb 项目部署到云服务器上.兴奋吧?淡定淡定~ 二.项目部署 我们对于 Java Web 项目在本地机器(无论是 Windows 还是 Linux)上的部署已经了然于心了,那么对于在云服务器上部署 Java Web 项目又是如何操作的呢? 其实很简单,还是离不开 Web 项目部署的那三点: ① 基础的 JDK 环境 ② 一个 Web 服务器.如 Tomcat.JBoss ③ 一款数据库.如:m

JAVA 笔记 七

JAVA笔记七 this:就代表本类的对象,this代表它所在函数所属对象的引用简单说:那个对象在调用this所在的函数,this就代表那个对象静态:static 用法:是一个修饰符,用于修饰成员(成员变量,成员函数)当成员被静态修饰后,就多了一个调用方式,除了可以被对象调用外,还可以直接被类名调用.类名.静态成员static特点1.随着类的加载而加载2.优先于的对象存在3.被所有对象所共享4.可以直接被类名所调用实例变量和类变量的区别:1.存放位置. 类变量随着类的加载而存在与方法区中. 实例

JAVA笔记六

JAVA笔记总结六 把大象放入冰箱的几步: 面向对象的三个特征:封装,继承,多态 JAVA开发实际上就是找对象使用,没有对象就创建一个对象 找对象,建立对象,维护对象的关系 类和对象的关系:类是对现实生活中实物的描述: 对象就是这类事物,实实在在存在的个体 匿名对象:匿名对象可以作为参数进行传递也可以作为对象方法进行一次调用

java 笔记 String 和Stringbuffer

String 是一个类,而不是java中的基本数据类型. String s = "abc";  "abc"是一个对象,存放在常量池中.一旦被初始化就不能被更改了. s = "cde";  这里并没有改变字符串,而是使对象引用指向字符串cde: String s1 = new String("abc"); String s2 = "abc"; 这两者有什么不同,第一个有两个对象,一个是"abc&qu

14.5-全栈Java笔记:java.awt这些布局怎么写?|流式|边界|网格

布局管理器 读者会发现,如果使用坐标定位法(空布局),在一个比较复杂的界面上定位每个控件的坐标是一个非常麻烦的工作,而且在界面大小发生改变时,控件的绝对位置也不会随之发生改变.那么如果我们想让用户界面上的组件可以按照不同的方式进行排列怎么办?例如:可以依序水平排列,或者按网格方式进行排列等,其实每种排列方案都是指组件的一种"布局",要管理这些布局,就需要本节学习的布局管理器. 管理布局的类由java.awt包来提供,布局管理器是一组实现java.awt.LayoutManager接口的

14.4-全栈Java笔记: javax.swing常用控件有哪些?怎么用?

常用基本控件 javax.swing.JButton 在图形界面程序中,按钮可能是使用量最大的控件之一,javax.swing包中JButton类就是用来创建按钮的.如表1所示,为JButton常用的构造方法.  javax.swing.JLabel JLabel控件是最简单的Swing组件之一,用于在窗体上显示标签, JLabel既可以显示文本,也可以显示图像.如表3所示,为JLabel常用的构造方法. 注意: JLabel只能用于显示文本和图标信息,用户不能对其进行修改. javax.swi