zoukankan      html  css  js  c++  java
  • 递归的理解

        //十进制的数转化为二进制
        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.

    例子2:

    //求1+2+3....+n的和
        public static int sum(int n){
            if(n==1){//递归结束的标志
                return 1;
            }else{
                return n+sum(n-1);
            }
        }

    分析和上例一样,先正向传参,然后逆向返回结果,最后结果为6。当我们传入8000000的时候,Exception in thread "main" java.lang.StackOverflowError,会发生递归栈溢出报错的现象,就是由于每次调用方法,就会在栈中开辟新的一份空间,当栈空间不够时,就会溢出。

  • 相关阅读:
    ymnets----框架内功能了解
    ymnets----代码生成
    关于分层架构
    SQL——抛出错误
    Jump Game
    combination sum && combination sum II
    35-Search Insert Position
    33-Search in Rotated Sorted Array
    34- Find First and Last Position of Element in Sorted Array
    机器学习实战之SVM
  • 原文地址:https://www.cnblogs.com/200911/p/3859301.html
Copyright © 2011-2022 走看看