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. CSS3实战开发: 折角效果实战开发

    <!DOCTYPE html> <html> <head> <meta charset="utf-9"> <meta name ...

  2. Prometheus的架构及持久化

    原文: https://my.oschina.net/go4it/blog/855598 Prometheus是什么 Prometheus是一个开源的系统监控和报警工具,特点是 多维数据模型(时序列数 ...

  3. [No0000DA]WPF ControlTemplate简介

    一.简介 WPF包含数据模板和控件模板,其中控件模板又包括ControlTemplate和ItemsPanelTemplate,这里讨论一下ControlTemplate.其实WPF的每一个控件都有一 ...

  4. day0321 生成器

    一.生成器 1.迭代器: 1.1.调用方法直接返回 1.2.可迭代对象通过执行iter方法得到 迭代器的优势:节省内存. 2.生成器:有些情况我们也需要也需要节省空间,只能是自己写来实现迭代器的功能就 ...

  5. JsLint 的安装和使用

    JSLint 是一款Javascript验证工具,在定位错误并确保基本指南得以遵循时,非常有用.如果你正在编写专业级的javascript,应该使用 JSLint 或者类似的验证工具(JSHint). ...

  6. [http][ident] ident协议

    读<http权威指南>提到了ident协议. 接受客户端连接 在这个步骤中,包括建立连接,这里Web服务器可以随意拒绝或立即关闭任意一条连接.客户端主机名解析部分,服务器可以用“反向DNS ...

  7. javascript中的值如何传递到django下的views.py中或者数据库中?

    用Ajax,Ajax有很多种写法,包括JQuery和JS,这里贴一个用JQuery写的最通用的Ajax,POST方法传递JSON格式数据: $.ajax({ url: "your url&q ...

  8. LeetCode 427 Construct Quad Tree 解题报告

    题目要求 We want to use quad trees to store an N x N boolean grid. Each cell in the grid can only be tru ...

  9. html多文件上传,可支持预览

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. BeanFactoryPostProcessor vs BeanPostProcessor

    BeanFactoryPostProcessors affect BeanDefinition objects because they are run right after your config ...