`
mazhongjia
  • 浏览: 26211 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
最近访客 更多访客>>
社区版块
存档分类
最新评论

用循环代替递归

F# 
阅读更多
public class nhn {

	public static int f(int x){
		if(x==0)
			return 0;
		else
			return 2 * f(x - 1) + x*x;
	}
	
	public static int f1(int x){
		if(x==0)
			return 0;
		else{
			int sum = 0;
			for(int i=0;i<=x;i++){
				sum = sum * 2 + i*i;
			} 
			return sum;
		}
	}
	
	public static void main(String[] args){
		System.out.println(f1(8000));
		//System.out.println(f(8000));
	}
}

 结论:递归会把调用的方法全部压入当前线程的方法调用栈,容易导致栈溢出。抛出java.lang.StackOverflowError

分享到:
评论

相关推荐

    循环代替递归

    本文将深入探讨“循环代替递归”这一主题,并结合JSON转换来展示其实现。 首先,我们要理解循环和递归的基本概念。循环是一种重复执行某段代码直到满足特定条件为止的结构,而递归则是函数调用自身来解决问题的方法...

    提升Python效率之使用循环机制代替递归函数

    总结来说,使用循环代替递归的主要优势在于: 1. **减少计算量**:循环避免了递归中重复计算子问题的情况,特别是在处理具有重叠子问题的算法时,如动态规划和分治策略。 2. **降低栈空间消耗**:递归会导致调用栈...

    java培训知识-递归

    然而,在实际开发中,应谨慎使用递归,考虑其性能影响,并尽量优化,例如通过记忆化技术减少重复计算,或者用循环代替递归以提高效率。在Java培训中,深入理解和熟练运用递归是提升编程能力的重要一步。

    一个例题,递归示例,非常形像的示例

    为了优化,可以使用尾递归(在递归调用的最后返回,无需额外的操作)或者迭代(使用循环代替递归)。 在实际编程中,递归可以提高代码的简洁性和可读性,但同时也需要谨慎使用,避免陷入无限递归的陷阱。此外,调试...

    循环递归算法设计.rar

    1. 使用迭代代替递归:在某些情况下,递归可能导致大量的函数调用,增加栈空间的使用。通过改用迭代,可以避免这些问题。 2. 动态规划:动态规划是一种优化技术,通过存储子问题的解来避免重复计算,提高效率。 3. ...

    合并排序算法非递归形式源码

    - 循环结构:非递归实现的关键在于用循环代替递归调用,逐步缩小需要排序的子序列范围。 - 数据结构:源码可能会使用指针来处理数组的分割和合并,以便有效地在内存中操作数据。 通过分析和理解`mergeSort.c`的源码...

    python基础编程:提升Python效率之使用循环机制代替递归函数

    这篇文章主要介绍了提升Python效率之使用循环机制代替递归函数的相关知识,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下 斐波那契数列 当年,典型的递归题目,斐波那契数列还记得吗? ...

    递归替换_递归替换_递归替换问题_

    5. 确保处理嵌套的`#include`指令,防止无限循环,可以使用一个跟踪已处理文件的集合。 6. 考虑处理相对路径和绝对路径,可能需要`chdir()`或`realpath()`。 7. 考虑错误处理,如无法打开文件、文件不存在等。 递归...

    完整详细版 C语言版 数据结构与算法课程 第5章 递归算法(共77页).pptx

    虽然递归通常与分治策略一起出现,但在某些情况下,递归问题可以通过迭代的方式解决,即使用循环代替递归调用。迭代通常比递归更节省资源,因为递归调用会产生额外的函数调用开销,可能导致栈溢出。然而,递归的代码...

    二分搜索的递归和非递归实现

    非递归方法通常使用循环来代替递归,避免了递归带来的栈空间消耗。非递归实现的基本步骤如下: 1. 初始化左边界为数组起始索引(通常为0),右边界为数组最后一个元素的索引。 2. 当左边界小于或等于右边界时,进入...

    易语言递归算法1

    在某些情况下,可以考虑使用迭代(循环)代替递归来优化代码。 - **终止条件**:确保每个递归调用都有明确的终止条件,避免陷入无限递归。 - **调试与测试**:递归函数往往比较复杂,因此在编写和调试时,要特别...

    C语言 地图染色 非递归 源代码 下载

    非递归方法通常使用循环结构来代替递归,这样可以避免深度过大的递归栈可能导致的效率问题,以及在某些情况下可能引发的栈溢出。 源代码的核心思路可能是使用邻接矩阵或邻接表来表示地图的邻接关系,每个区域作为一...

    基于.net平台递归树

    为防止这种情况,可以使用迭代法代替递归,或者设置最大递归深度限制,并在达到该深度时返回错误或截断结果。 5. **错误处理**:递归过程中可能出现的错误包括无效的上级ID、循环引用(员工A的上级是B,B的上级又...

    消除文法的左递归

    - 如果检测到直接左递归,则创建一个新的非终结符 `str2` 来代替原有的递归部分。 - 更新 `sentence` 映射,添加新的产生式,并删除原有的产生式。 - `solve()`:尚未完成的函数,用于调用其他辅助函数处理整个...

    第7章 python函数.doc

    2. **迭代**: 当可能时,使用循环代替递归可以提高效率,因为循环不涉及函数调用。 **四、递归的应用** 1. **分治算法**: 如快速排序、归并排序等,递归可以帮助我们分解大问题为小问题。 2. **树和图的遍历**: ...

    关于递归的误区

    通过采用合理的优化策略,如记忆化搜索或迭代代替递归,可以显著提高算法的执行效率。在实际开发中,程序员应根据具体问题的特点和需求,灵活选择合适的算法设计方法,以实现既高效又稳定的代码实现。

    递归查询数据库,返回List到前台

    在这种情况下,可以考虑使用迭代方式代替递归,或者采用缓存机制减少重复计算。 - **异常处理**:在递归过程中,可能出现各种异常情况,如数据库连接失败等。因此,在编写递归方法时,应适当增加异常处理逻辑。 - **...

    非递归二叉树递归创建.txt

    为了真正实现非递归创建二叉树,可以采用队列或栈等数据结构来代替递归调用。 #### 三、二叉树的非递归遍历 二叉树的遍历主要有三种:前序遍历、中序遍历和后序遍历。下面分别介绍这三种非递归遍历的方法: ##### ...

    c语言递归解24点游戏

    因此,在实现时,可能需要考虑优化,如使用迭代代替递归,或者使用更高效的数据结构来存储和查找运算路径。 总的来说,通过C语言实现24点游戏的递归解法,不仅可以提高编程思维能力,还能深入理解递归算法及其在...

Global site tag (gtag.js) - Google Analytics