递归与非递归打印乘法口诀表--Scala(指令式、函数式思维练习)
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(指令式、函数式思维练习)的更多相关文章
- 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到小于 ...
- 【Python】【demo实验2】【打印乘法口诀表】
打印乘法口诀表 源代码: # encoding=utf-8 for i in range(1,10): print("\n") for j in range(1,10): if i ...
- C语言基础练习——打印乘法口诀表
C语言基础练习--打印乘法口诀表 JERRY_Z. ~ 2020 / 8 / 26 转载请注明出处! 代码: /* * @Author: JERRY_Z. * @Date: 2020-08-26 16 ...
- 用SQL打印乘法口诀表
--用SQL打印出乘法口诀表 declare @i int ,@j int --@i是乘法口诀的行数 --一共九行 begin --每次都是从1*开始,j每循环一次递增 )--print每次输出都会换 ...
- php打印乘法口诀表
<?php $n=9; //动态控制乘法口诀表的行数 echo"<table>"; //外层循环控制行数 for($i=1;$i<=$n;$i++){ // ...
- 简单的用js打印乘法口诀表
<script type="text/javascript"> //乘法口诀表 for (var i = 1; i < 10; i++) { for (var j ...
- 利用T-Sql语句中的二重循环打印乘法口诀表
--定义三个初始化变量 declare @a int,@b int,@c varchar(200) --对@a进行赋值 set @a=1 --循环输出9次,@a为被乘数 while(@a<=9) ...
- java 打印乘法口诀表
package cn.lijun.demo6; public class Test3 { public static void main(String[] args) { for(int j=1;j& ...
- 用一个for循环实现打印乘法口诀表
本博客不再更新,很多其它精彩内容请訪问我的独立博客 循环体内定义两个变量.一个控制列,一个控制行. for(int i=0,j=0;j<9;i++){ System.out.println(j+ ...
随机推荐
- 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 ...
- python 如何在一个.py文件中调用另一个.py文件的类
如果是在同一个 module中(也就是同一个py 文件里),直接用就可以如果在不同的module里,例如a.py里有 class A:b.py 里有 class B:如果你要在class B里用cla ...
- springMVC参数传递实例
最好所有的post请求用postman这个工具就好了. postman传对象
- 创建数据库,创建数据库表,例子。MySQL语句
1.创建数据库: 创建的代码:create 数据库的代码:database 数据库表名:随便起,只要自己记住就行.test create database test; 2.删除数据库: 删 ...
- PDO 基础知识
PDO: 一.含义: 数据访问抽象层 二.作用 :通过PDO能够访问其它的数据库 三. 用法: 1.造对象 ①$dsn="mysql:dbname=zz(数据库名);host=localho ...
- 使用 PREPARE 的几个注意点
简单的用set或者declare语句定义变量,然后直接作为sql的表名是不行的,mysql会把变量名当作表名.在其他的sql数据库中也是如此,mssql的解决方法是将整条sql语句作为变量,其中穿插变 ...
- robot framework教程-------虫师
http://www.testclass.net/2017/09/28/happy-holidays/
- [No0000FF]鸡蛋煮熟了蛋黄为什么发黑?
你是否发现,鸡蛋煮熟后,蛋黄表面会呈现青黑色. 这是怎么回事? 这是因为鸡蛋的蛋白质富含有半胱氨酸,鸡蛋如果加热过度使半胱氨酸部分分解产生硫化氢,与蛋黄中的铁结合形成黑色的硫化铁.煮蛋中如果鸡蛋表面的 ...
- [No0000D4]批处理全部代码详解Allbat
COPY REM Copies one or more files from one location to another. REM [/d] - Allows the encrypted file ...
- 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 ...