object Test extends App
{
def printMultiTable()
{
var i = 1
while (i < 10)
{
var j = 1
while (j <= i)
{
val prod = i * j
if (j != 1) print(" ")
val str = s"$j * $i = $prod"
val k = str.length
// while (k <= 10)
// {
// print(" ")
// k = k + 1
// }
if (k < 10)
{
print(" " * (10 - k))
}
print(str)
j += 1
}
println()
i += 1
}
} // printMultiTable()//打印测试 //返回第i行第j列的单个乘法式子
def multiExpression(i: Int, j: Int): String =
{
val res = i * j
s"$j * $i = $res "//注意j在前
}
//乘法表,至第i行第j列
def multiTable(i: Int, j: Int, str: String): String =
{
if (i <= 0 && j <= 0)
{
str
}
else if (j == 1)
{
      if(i == 1)
        multiExpression(1, 1) + str
      else
   multiTable(i - 1, i - 1, "\n" + multiExpression(i, 1) + str )//在后面追加打印出的单个乘法式子,注意换行
}
else
{
multiTable(i, j - 1, multiExpression(i, j) + str)
}
} println(multiTable(4, 4, ""))//打印测试

//返回第i行,从该行的第1到第j个式子; 一行 = 前j-1个式子 + 第j个式子
def multiLine(i: Int, j: Int, str: String): String =
{
if (j == 0)
{
str
}
else
{
multiLine(i, j - 1, multiExpression(i, j) + str)
}
}
//利用子表“加上”当前行的思维,递归
def multiTable2(i: Int): String =
{
if (i == 1)
{
"1 * 1 = 1 "
}
else
{
multiTable2(i - 1) + "\n" + multiLine(i,i,"")
} } println(multiTable2(3))
}

递归与非递归打印乘法口诀表--Scala(指令式、函数式思维练习)的更多相关文章

  1. Python打印乘法口诀表

    思路:第一行:1*1,第二行:1*2.,2*2,第三行:1*3,2*3,3*3-- 最后一行:1*9,2*9,3*9,-9*9,以此类推,可以设2个数:i,j:让 i 从1循环到9,让 j 从1到小于 ...

  2. 【Python】【demo实验2】【打印乘法口诀表】

    打印乘法口诀表 源代码: # encoding=utf-8 for i in range(1,10): print("\n") for j in range(1,10): if i ...

  3. C语言基础练习——打印乘法口诀表

    C语言基础练习--打印乘法口诀表 JERRY_Z. ~ 2020 / 8 / 26 转载请注明出处! 代码: /* * @Author: JERRY_Z. * @Date: 2020-08-26 16 ...

  4. 用SQL打印乘法口诀表

    --用SQL打印出乘法口诀表 declare @i int ,@j int --@i是乘法口诀的行数 --一共九行 begin --每次都是从1*开始,j每循环一次递增 )--print每次输出都会换 ...

  5. php打印乘法口诀表

    <?php $n=9; //动态控制乘法口诀表的行数 echo"<table>"; //外层循环控制行数 for($i=1;$i<=$n;$i++){ // ...

  6. 简单的用js打印乘法口诀表

    <script type="text/javascript"> //乘法口诀表 for (var i = 1; i < 10; i++) { for (var j ...

  7. 利用T-Sql语句中的二重循环打印乘法口诀表

    --定义三个初始化变量 declare @a int,@b int,@c varchar(200) --对@a进行赋值 set @a=1 --循环输出9次,@a为被乘数 while(@a<=9) ...

  8. java 打印乘法口诀表

    package cn.lijun.demo6; public class Test3 { public static void main(String[] args) { for(int j=1;j& ...

  9. 用一个for循环实现打印乘法口诀表

    本博客不再更新,很多其它精彩内容请訪问我的独立博客 循环体内定义两个变量.一个控制列,一个控制行. for(int i=0,j=0;j<9;i++){ System.out.println(j+ ...

随机推荐

  1. android编译错误--/usr/bin/ld: cannot find -lz

    编译时出现/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.4.5/../../../libz.so when se ...

  2. python 如何在一个.py文件中调用另一个.py文件的类

    如果是在同一个 module中(也就是同一个py 文件里),直接用就可以如果在不同的module里,例如a.py里有 class A:b.py 里有 class B:如果你要在class B里用cla ...

  3. springMVC参数传递实例

    最好所有的post请求用postman这个工具就好了. postman传对象

  4. 创建数据库,创建数据库表,例子。MySQL语句

    1.创建数据库:    创建的代码:create  数据库的代码:database   数据库表名:随便起,只要自己记住就行.test create database test; 2.删除数据库: 删 ...

  5. PDO 基础知识

    PDO: 一.含义: 数据访问抽象层 二.作用 :通过PDO能够访问其它的数据库 三. 用法: 1.造对象 ①$dsn="mysql:dbname=zz(数据库名);host=localho ...

  6. 使用 PREPARE 的几个注意点

    简单的用set或者declare语句定义变量,然后直接作为sql的表名是不行的,mysql会把变量名当作表名.在其他的sql数据库中也是如此,mssql的解决方法是将整条sql语句作为变量,其中穿插变 ...

  7. robot framework教程-------虫师

    http://www.testclass.net/2017/09/28/happy-holidays/

  8. [No0000FF]鸡蛋煮熟了蛋黄为什么发黑?

    你是否发现,鸡蛋煮熟后,蛋黄表面会呈现青黑色. 这是怎么回事? 这是因为鸡蛋的蛋白质富含有半胱氨酸,鸡蛋如果加热过度使半胱氨酸部分分解产生硫化氢,与蛋黄中的铁结合形成黑色的硫化铁.煮蛋中如果鸡蛋表面的 ...

  9. [No0000D4]批处理全部代码详解Allbat

    COPY REM Copies one or more files from one location to another. REM [/d] - Allows the encrypted file ...

  10. Vue SSR 配合Java的Javascript引擎j2v8实现服务端渲染3配置webpack支持ssr

    安装 cross-env yarn add -D cross-env 安装 html-webpack-plugin yarn add -D html-webpack-plugin 安装 webpack ...