递推和递归_一文学会递归递推

递归算法和递推算法无论是在ACM竞赛还是项目工程上都有着极为广泛的应用,但想要完全掌握两者的思想并不容易,对于刚刚接触编程的人来说更是这样,我在初次接触递归递推时就吃了很多的苦头,除了当时对编程语言不太熟悉之外,最大的原因就是难以理解其中的思想,本文将二者结合代码分别讲解,力求以"理论+实践"的方式使读者明白两种算法。一箭双雕,一文双递。

一.递归和递推的区别

学习递归递推的一个容易遇到的问题就是混淆二者的概念。所以学习时首先就要明白二者的区别。

二者的区别也可以看做二者的概念。

  • 递归:一个方法/函数的自我嵌套,从结果出发一直向前回溯到初始状态(值),是一种程序自身调用自身的技巧,类似于套娃。举个栗子。

从前有座山,山里有座庙,庙里有个老和尚,在给小和尚讲故事。讲的什么故事呢?从前有座山,山里有座庙,庙里有个老和尚,在给小和尚讲故事。讲什么故事呢?从前有座山,山里有座庙,庙里有个老和尚,在给小和尚讲故事。讲的什么故事呢?从前有座山,山里有座庙,庙里有个老和尚,在给小和尚讲故事

这个大家耳熟能详的"老和尚讲故事"就是典型的递归。

  • 递推:与递归的从结果找初始状态(值)相反,递推是已知初始状态(值),一步步计算得到最后的结果。高中数学中的数列经常会使用递推式。如:

S(n) = S(n - 1) + n ; D(n)=D(n-1)+D(n-2)+3

从上述样例可以看出,一个数列的某一项是通过它的前一项或前几项通过某种计算得到的。

二.递归–自我调用,递尽而归

1.递归条件

(1)原问题可以变成更简单,规模更小的子问题,且原问题和子问题相似。

(2)一定要存在递归出口,即递归的结束条件。比如设置某种情况,在这种情况下会使递归函数返回,做到递尽而归。否则函数会一直递归下去,造成死循环。

2.递归图解

"一图胜千言",用图解的方式可以更好的理解递归。

给出一个正整数n,计算出1+2+...+n的结果

这道题最快的方法是用求和公式,但是为了体现出递归的概念,这里采用递归的思想。

import java.util.Scanner;public class ADD {    public static void main(String[] args) {        Scanne

你可能感兴趣的:(递推和递归)