递归的理解

//十进制的数转化为二进制
    public static void toBin(int num){
        if(num > 0){
            toBin(num/2);
            System.out.println(num%2);
        }
    }

以上面的十进制转化为二进制为例:传参数传入6,把6转化为二进制:使用递归函数不断的调用自身,由于方法在java中是存放到栈中的:在栈中分配空间如下图:

递归总有结束的时候,当if(0>0)的时候结束,然后逆向输出结果,从下到上,最后一个递归方法直接结束,因为if(0>0)不成立,也就是说toBin(0)方法没打印结果,到倒数第二个toBin(1),首先if(1>0)条件成立,执行到toBin(1/2)也就是toBin(0),由于知道toBin(0)执行完了,所以toBin(1/2)执行完,相当于直接执行输出方法(1%2)=1,所以打印出1,同理toBin(3/2)执行完了在,执行打印语句3%2,打印出1,同理toBin(6/2)执行完了,执行打印语句

6%2=0,结果为110.

递归的理解,布布扣,bubuko.com

时间: 2024-12-16 17:08:28

递归的理解的相关文章

对于递归的理解

以下是我对递归的理解如果有不对希望大家指正,谢谢. 附上代码: public class Test { public static void main(String[] args) { // TODO Auto-generated method stub int sum = DiGui(5); System.out.println("mainSum="+sum); } private static int DiGui(int n) { int sum = 0; if(0 == n) {

对递推和递归的理解

对递推和递归的理解 1.此问题能否用递推解决 我们以斐波拉契数列问题为例进行阐述,斐波拉契数列为0.1.1.2.3.5.8.13.21.-表现斐波拉契数列为瘦柱状图的形式,如下 我们现在所要解决的问题是求取第n个位置的数值,下面我们正式开始考虑能否用递推解决这个问题(关于递推和递归的区别,将会在下文阐述): 我们考察3号位置,我们发现3号位置的值依赖于1号位置和2号位置,即在1号位置的值和2号位置的值的基础上,我们再进行一些(一个)操作就可以得到3号位置的值.在本例中,这个操作为加法运算. 我们

关于递归的理解及递归表达式复杂度分析(以求解最大公约数为例)

一,递归的四大基本法则: ①基准情形 基准情形是指那些不需要递归(不需要经过函数调用)之后就能退出的情况.它保证了递归的结束. ②不断推进 每一次递归之后,都要向着基准情形靠近,并且在靠近的过程中问题的规模越来越小. ③设计法则 书上说是:假设所有的递归调用都能运行-----“不是特别理解” ④合成效益法则 不要在不同的递归调用中做重复的工作. 二,实例 求解最大公约数--采用欧几里德算法 1 public static int gcd_recursive(int m, int n){ 2 if

链表算法递归的理解

一:前言 今天在博客园里面看了一篇文章http://www.cnblogs.com/huangxincheng/p/4051854.html(单链表的倒置),其实自己看了一个小时最后那点还是没看明白,自己的不明白在于,递归调用到最后执行递归下面的代码是怎么执行的,如果执行了,执行时的数据从哪来的?我就是这点想不明白,但是我自己能看懂这个代码.此时的想不明白不知道算不算钻牛角尖.还是先说说自己的理解吧!!! 二:我把他的那段代码复制过来了,单链表我自己又随便写个是:9---->6------->

递归的理解与应用

1.理解递归 递归:是一种应用非常广泛的算法(或编程技巧),DFS深度优先搜索,前中后二叉树遍历等,都有使用到. 2.递归需要满足的三个条件: a.一个问题可以分解为多个子问题 b.该问题与子问题的求解思路完全一致 c.存在递归的终止条件 3.编写递归代码: a.写出推导公式 b.找到终止条件 c.翻译成代码实现 注意: 递归要警惕调堆栈溢出:当调用深度过大,不建议使用递归实现 递归要警惕重复计算:可以将计算过的数据保存起来,下次计算时先查找一下 递归的空间复杂度是O(n) 4.将递归代码改写为

二叉排序树插入C语言版 递归步骤理解

1 //二叉排序树 插入 (纯C语言实现) 2 BTNode * BSTInsert2(BTNode *bt,int key){ 3 //为什么纯C语言实现中 4 if(bt==NULL){ //要写成 bt->rchild=BSTInsert2(bt->lchild,key); 5 bt = (BTNode*)malloc(sizeof(BTNode)); //而不是直接 BSTInsert2(bt->lchild,key);或者是 6 bt->lchild =bt ->r

浅谈 PHP递归的理解(递归听起来很高端的词汇 其实就是两次循环)

$data = [ ['pid'=>0,'id'=>1], ['pid'=>1,'id'=>2], ['pid'=>3,'id'=>4], ['pid'=>0,'id'=>3], ]; //对上面的数据进行递归排序(原生的写法) function genCate( $data, $pid = 0) { static $result = array(); foreach ($data as $key => $row) { if ($row['pid']

递归好理解,可是不好用啊

<!doctype html><html><head><meta charset="utf-8"><title>无标题文档</title></head> <body>    <script>        //递归函数:是在一个函数内通过名字可以调用自身的情况下,就叫做递归函数        //求5!---5*4*3*2*1        //求6!              

动态规划和分治法,贪心算法以及递归的再一次深刻理解和体会

每次体会算法都有新的感觉,刷题越多,对算法的理解感觉也就越深刻. 下面我们来重新体会下分治法,动态规划,贪心法,递归的理解. 1.分治法: 将问题分成单独的阶段,每个阶段互相不干扰很独立,如10米长的木棍,切成10段,每段去解决每一段的问题.(阶段没有关系) 2.贪心法 站在全局的角度,也是将问题堪称分为多个阶段,只不过阶段和阶段之间有一定的递进关系,如从5毛,1元,2毛,1毛,2元中,去找最少的钱币构成10块钱.首先是站在全局的角度,先从中取其最大值,为第一阶段,然后在从剩余的当中在找最大值,