从今天起,开始研究java的相关算法,如果大家有什么好的算法题目的话,麻烦推荐一下,大家一起学习,一起研究,谢谢!如果有什么好的算法题目,我也会在解答后发表上来,有什么不足或者错误大家可以批评指正,或者提出自己的见解,谢谢!
下面是java经典算法里面的32题整理,按照自己的思维一步步来进行解析和说明,也希望给一些没有思路的朋友提供下思路,当然如果大家有什么好的思路的话也可以提出来。
【程序1】 题目:古典问题:3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
分析:首先我们要明白题目的意思指的是每个月的兔子总数(这里应该是按对来计算的);我们假设将兔子分为小中大三种,兔子从出生后每三个月就生出一对兔子,那么我们假定第一个月为小兔子,第二个月为中兔子,第三个月之后就为老兔子(老兔子每过三个月还会再生的),那么第一个月分别有1、0、0,第二个月分别为0、1、0,第三个月分别为1、0、1,第四个月分别为,1、1、1,第五个月分别为2、1、2,第六个月分别为3、2、3,第七个月分别为5、3、5……
兔子总数分别为:1、1、2、3、5、8、13……
于是得出了一个规律,从第三个月起,后面的兔子总数都等于前面两个月的兔子总数之和。
于是有了下面的编程:
public class TestOne {
public static void main(String[] args) {
int rabbitNum = 1;
for(int i = 1 ; i < 20 ; i++){
rabbitNum = getMonthNum(i);
System.out.println("兔子第 "+i+" 个月的总数为:"+rabbitNum);
}
}
public static int getMonthNum(int x){
int initRabbit = 1;
if(x == 1 || x == 2){
return initRabbit;
}
initRabbit = getMonthNum(x-1) + getMonthNum(x-2);
return initRabbit;
}
}
在这个例子中,主要用到了递归的思想。学过java的人一般都学过递归。递归函数提供了不一样的思维方式,用他来解决往往程序要短小很多,思维也会很清晰。它很适合解决树中的一些问题,在编译原理中也可以经常看到。
它的主要的解决问题的思维是这样的:
先解决最基础的简单的问题;
然后把复杂的问题归结为较简单的问题或把较大的问题分解为较小的问题。
下面这小段程序是用递归写的用来求1到n所有这些正整数的和的:
public static int f(int n){
if(n==1) return 1;
return n+f(n-1);
}
第一句解决了最简单的问题,就是n==1的情况。接下去在求较复杂的f(n)的时候把它归结为较简单的问题f(n-1)。
用递归也有几个需要注意的问题:
1.程序总得要有机会让它退出来,不然会变成死循环。就象这里的第一句,而且一般来说位置也通常在第一句。
2.递归还有性能开销。一是因为函数调用时参数的入栈出栈操作。二是有些问题处理不当会出现重复计算(不是很老到的程序员经常会出这样的问题,导致性能有问题,然后说递归根本没实际意义)。
分享到:
相关推荐
Java实现用递归算法和非递归算法求解斐波那契数列问题.docx
在Codeblocks中首先用C语言生成一个迷宫并用递归算法求解一条可行的路径
用非递归解决八皇后的问题,是经典的非递归算法,学习数据结构中很有用
主要介绍了Python基于递归算法实现的走迷宫问题,结合迷宫问题简单分析了Python递归算法的定义与使用技巧,需要的朋友可以参考下
某种传染病第一天只有一个患者,前5天为潜伏期,不发作也不会传染人,第6天开始发作,从发作到治愈需要5天时间,期间每天传染3个人,求第N天共有多少患者。
.net 递归算法.net 递归算法.net 递归算法.net 递归算法.net 递归算法.net 递归算法.net 递归算法.net 递归算法
棋盘覆盖问题 棋盘覆盖问题_基于C++使用分治递归算法求解棋盘覆盖问题
论文研究-随机递归算法求解车辆路径问题.pdf,
递归算法详解递归算法详解递归算法详解递归算法详解
VC对磁盘文件遍历搜索的递归算法和非递归算法 里面的文档是讲解递归算法和递归算法的 里面还有一个Vc工程文件,是我自己写的,关于非递归算法,其实里面那些被注释掉的部分是递归算法,大家仔细看看就知道了,
应用于java中的算法 递归算法:是一种直接或者间接地调用自身的算法。在计算机编写程序中,递归算法对解决一大类问题是十分有效的,它往往使算法的描述简洁而且易于理解。
背包问题递归算法及非递归算法的C++实现,问题描述:一个背包能盛放的物品总重量为S,设有n件物品,其重量分别为w1,…,wn,从n件物品中选择若干,使得重量恰好为S
5!递归算法和非递归算法,面试专用,适合新手
18.递归算法与递归算法应用.ppt
acm递归算法总结acm递归算法总结!!!!!!!!!!!!!!!!!!!!!!!
快速排序算法设计与分析总结 二叉树与树的转换前序、后序的递归、非递归算法,层次序的非递归算法的实现 二叉树与树的转换前序、后序的递归、非递归算法,层次序的非递归算法的实现,应包含建树的实现 实现树与...
基于python实现的迷宫生成算法+基于递归的求解源码.zip基于python实现的迷宫生成算法+基于递归的求解源码.zip基于python实现的迷宫生成算法+基于递归的求解源码.zip基于python实现的迷宫生成算法+基于递归的求解源码...
算法时间复杂度分析中递归方程求解方法综述
递归算法转为非递归算法。方法、过程,用栈的原理
此程序可以实现对两个整数求最大公约数,所用得法为递归算法。