一代码比较
1 代码示例1——朝小的一端递归
public class Recursive1 { public static int fn(int n) { if (n == 0) { return 1; } else if (n == 1) { return 4; } else { // 方法中调用它自身,就是方法递归 return 2 * fn(n - 1) + fn(n - 2); } } public static void main(String[] args) { // 输出fn(10)的结果 System.out.println(fn(10)); } }
2 运行结果
10497
3 代码示例2——朝大的一端递归
public class Recursive2 { public static int fn(int n) { if (n == 20) { return 1; } else if (n == 21) { return 4; } else { // 方法中调用它自身,就是方法递归 return fn(n + 2)- 2 * fn(n + 1) ; } } public static void main(String[] args) { // 输出fn(10)的结果 System.out.println(fn(10)); } }
4 运行结果
-3771
二 结果分析比较
代码示例1是这样一道数学题:f(0)=1,f(1)=4,f(n+2)=2*f(n+1)+f(n),其中n大于0的整数。
代码示例2是这样一道数学题:f(20)=1,f(21)=4,f(n)=f(n+2)-2f(n+1),其中n是大于0的整数。
代码示例1和代码示例2都是朝着已知方向递归,所以不存在问题,如果沿着未知方向递归,势必引起死循环。
相关推荐
汉诺塔是一个经典的递归问题,它源自印度的一个古老传说,涉及将一组圆盘从一根柱子移动到另一根柱子,遵循特定的规则。在这个问题中,有三根柱子,标记为 A、B 和 C,以及 n 个大小不一的圆盘,每个圆盘都标有不同...
欧几里得算法是求解GCD的递归方法,其原理是利用较小数除较大数,再对余数重复此过程,直到余数为0,此时除数即为GCD。C++中实现如下: ```cpp int gcd(int a, int b) { if (b == 0) return a; else return gcd...
N皇后问题是一个经典的计算机科学问题,它涉及到在N×N的棋盘上放置N个皇后,使得皇后之间不能互相攻击,即任何两个皇后都不能处于同一行、同一列或同一...两种方法都有其优点和适用场景,是算法设计和分析的重要工具。
在主函数 `main()` 中,用户被要求输入要计算的斐波那契数的索引 `n` 和选择的算法(1 代表非递归,2 代表递归)。程序将打印出结果以及对应算法的运行时间。 总的来说,这个程序展示了如何使用 C 语言和时间测量...
算法思想——递归与分治 递归和分治是两种常用的算法思想,它们可以单独使用,也可以结合使用以解决复杂的问题。下面我们将详细探讨这两种算法思想。 递归是一种算法思想,它的基本思想是将一个问题分解成一个或多...
汉诺塔——经典的递归 *实现移动函数 *递归实现汉诺塔函数
`QuickSort()`方法作为线程的主要执行体,它首先确定排序区间的中间元素作为枢纽元素,然后通过`while`循环从区间的两端向中间扫描,寻找符合条件的元素进行交换。为了实现并行性,`try-catch`块被用来捕获可能的...
【数据结构】——搜索二叉树的插入,查找和删除(递归&非递归) 在计算机科学中,数据结构是存储和组织数据的方式,它直接影响到数据的处理效率。搜索二叉树(BST,Binary Search Tree)是一种特殊类型的数据结构,...
如果k正好是基准的位置,则基准就是我们要找的第k小元素。 ### 非递归实现 非递归实现通常使用栈来模拟递归过程。首先,对整个数组进行一次分区操作,然后根据k的位置将搜索范围缩小到栈中。当栈不为空时,取出...
### 全排列——递归排序和字典序列 在计算机科学与编程领域中,全排列是一种重要的算法,它被广泛应用于解决多种问题,如组合优化、密码学等。本文将详细介绍两种实现全排列的方法:递归排列和字典序排列,并通过...
`AddReplies()` 方法负责向给定的父节点添加子节点。方法首先创建一个新的`DataView`对象`dv`并设置过滤器为`byte='父节点的Tag'`,这意味着它将查找那些`byte`字段值等于当前节点`Tag`属性的数据行。 对于`dv`中的...
Java作为一种广泛使用的高级编程语言,其语法分析同样遵循自顶向下的方法。本文将深入探讨如何利用递归子程序来实现这一过程,并在分析过程中打印出语法分析树,以帮助我们更好地理解和调试编译器。 首先,我们需要...
### 编译原理生成四元式——递归子程序方法 #### 一、知识点概述 在编译原理中,四元式是一种常见的中间代码表示形式,它由四个部分组成:操作符、操作数1、操作数2以及结果的存放位置。这种表示方式非常适合于...
递归下降法是一种自顶向下的解析策略,它基于文法的递归性质来构建解析函数。在C语言的编译器设计中,递归下降法通常用于处理C语言的语法结构。这种方法的优点在于其简洁和易于理解,每个非终结符对应一个函数,而每...
这种遍历方法的递归实现较为复杂,因为必须确保左右子树都遍历完后才能访问根节点,所以通常需要使用辅助栈来存储已访问但未输出的节点。非递归实现则更复杂,需要维护一个栈来保存待访问的节点,并且在遍历过程中...
在IT领域,二叉树是一种基础且重要的数据结构,它由节点构成,每个节点最多有两个子节点,分别称为左子节点和右子节点。在实际编程中,我们常常需要对二叉树进行遍历,以访问或处理其所有节点。本主题主要探讨的是在...
这种分析方法基于自顶向下的策略,它将文法转换为一系列的递归函数,每个函数对应文法的一个非终结符。本实验“杭电编译原理实验——递归下降分析子程序”旨在帮助学生深入理解和掌握这一核心概念。 1. **递归下降...
递归逆转广义表————————
### ABAP简单递归算法解析 #### 一、引言 ABAP(Advanced Business ...通过上述分析,我们不仅了解了递归算法的工作机制,也熟悉了ABAP中递归函数的实现方法,这对于进一步学习和应用ABAP编程具有重要意义。
2. 对于任意给定的输入串(词法记号流)进行语法分析,递归下降方法和非递归预测分析方法可以任选其一来实现。 3. 要有一定的错误处理功能。即对错误能提示,并且能在一定程度上忽略尽量少的记号来进行接下来的分析...