当前位置: 首页 > 编程笔记 >

Java中的递归详解(用递归实现99乘法表来讲解)

伏砚
2023-03-14
本文向大家介绍Java中的递归详解(用递归实现99乘法表来讲解),包括了Java中的递归详解(用递归实现99乘法表来讲解)的使用技巧和注意事项,需要的朋友参考一下

1:普通实现99乘法表太简单,是个程序员都会,实现如下:

package test.ms;

public class Test99 {
 
  public static void main(String[] args) {
 
  for(int i=1; i<=9;i++){
   for(int j=1; j<=i; j++){
   System.out.print(j+" * "+i+ " = "+(i*j) +" ");
   }
   System.out.println();
  }
}
  
}

2:用递归方式实现 99乘法表
代码如下:

package test.ms;

public class MultiTable {
 public static void main(String args[]) { 
    m(9); 
  } 
 
  /** 
   * 打印出九九乘法表 
   * @param i 
   */ 
  public static void m(int i) { 
    if (i == 1) { 
      System.out.println("1*1=1 "); 
    } else { 
      m(i - 1); 
      for (int j = 1; j <= i; j++) { 
        System.out.print(j + "*" + i + "=" + j * i + " "); 
      } 
      System.out.println(); 
    } 
  }  
}

递归的方式调用图示:

每一个方法的调用都会产生一个栈帧,压入到方法栈,当递归调用的时候,方法栈中栈帧的图示和上图类似。
去掉方法中栈帧的引用关系更加直观:如下图所示:

简化掉相应的方法调用最后执行情况如上图所示,注意 i 一直在变  j每次都是从1开始 然后递增到和i相等。
这样上图依次出栈后就得到了 99 乘法表:

总结:

嵌套for循环 和  用递归实现 的比较:

栈 主要是用来存放栈帧的,每执行一个方法就会出现压栈操作,所以采用递归的时候产生的栈帧比较多,递归就会影响到内存,非常消耗内存,而使用for循环就执行了一个方法,压入栈帧一次,只存在一个栈帧,所以比较节省内存。

欢迎狠狠的拍砖。直到砸晕。

 类似资料:
  • 本文向大家介绍java递归算法的实例详解,包括了java递归算法的实例详解的使用技巧和注意事项,需要的朋友参考一下 递归三要素: 1、明确递归终止条件; 2、给出递归终止时的处理办法; 3、提取重复的逻辑,缩小问题规模。 1、1+2+3+…+n 2、1 * 2 * 3 * … * n 3、斐波那契数列 前两项均为1,第三项开始,每一项都等于前两项之和。即:1,1,2,3,5,8,… 4、二叉树的遍

  • 本文向大家介绍python中尾递归用法实例详解,包括了python中尾递归用法实例详解的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了python中尾递归用法。分享给大家供大家参考。具体分析如下: 如果一个函数中所有递归形式的调用都出现在函数的末尾,我们称这个递归函数是尾递归的。当递归调用是整个函数体中最后执行的语句且它的返回值不属于表达式的一部分时,这个递归调用就是尾递归。尾递归函数的特

  • 本文向大家介绍C#采用递归实现阶乘的方法,包括了C#采用递归实现阶乘的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#采用递归实现阶乘的方法,供大家参考之用。通常来说,如果想实现一个阶乘,比如6 * 5 * 4 * 3 * 2 * 1,首先想到的可能是循环遍历。 如下示例所示: 但以上的阶乘还有一种实现方式:6 * (6-1) * (6-2) * (6-3) * (6-4) * (

  • 本文向大家介绍PHP冒泡算法详解(递归实现),包括了PHP冒泡算法详解(递归实现)的使用技巧和注意事项,需要的朋友参考一下 实现 结果: 问题: 在尝试这个实现的时候遇到了一个问题,还未解决。 在这里: 补充: 解答: 这个可能不太好记住, 所以在使用的时候一定要注意, 在上面的问题中我就是忽略了这个问题导致了$index无限传递0值使得递归锁死。

  • 本文向大家介绍Java使用递归解决算法问题的实例讲解,包括了Java使用递归解决算法问题的实例讲解的使用技巧和注意事项,需要的朋友参考一下 解释:程序调用自身的编程技巧叫做递归。 程序调用自身的编程技巧称为递归( recursion)。递归做为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模

  • 问题内容: 我正在使用《 Java:完整参考》这本书来学习Java。目前,我正在从事递归主题。 请注意: 关于stackoverflow也有类似的问题。我搜索了它们,但没有找到解决问题的方法。我对以下程序中的逻辑感到困惑。 如果我运行下面的程序,它将产生正确的输出,但是我不理解其逻辑。 我不理解以下行中的逻辑: result = fact(n-1)* n; 据我所知,如果我们按以下程序所示传递n