递归与非递归打印乘法口诀表--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+ ...
随机推荐
- VS设置DLL所在的调试目录
如果一个项目依赖的DLL不想写在Path中,可以在 配置属性-调试-环境中添加 PATH=D:/OSG/bin;$(PATH)
- EGit系列第三篇——远程提交代码
接着上篇,把本地项目提交一次才能Pull,为什么要Pull而不直接Remote Push呢,因为本地和远程仓库内容不一样(通常在远程仓库第一次新建项目会带一个README.md), 要先把远程仓库的东 ...
- 微信小游戏的本地缓存和清除的使用 (text.js image.js file-util.js)
参考: 微信小游戏,文件系统 UpdateManager-小游戏 一.Egret提供的本地缓存工具类( 备注:新版本进行了修改,并增加了sound.js等) 在微信小游戏项目中,Egret提供了fil ...
- 10.5ORM回顾(2)
2018-10-5 14:47:57 越努力越幸运!永远不要高估自己! ORM的聚合和分组查询!!! # #####################聚合和分组##################### ...
- {前端CSS} 语法 Css的几种引入方式 css选择器 选择器的优先级 CSS属性相关 背景属性 边框 CSS盒子模型 清除浮动 overflow溢出属性 定位(position)z-index
前端CSS CSS介绍 CSS(Cascading Style Sheet,层叠样式表)定义如何显示HTML元素,给HTML设置样式,让它更加美观. 当浏览器读到一个样式表,它就会按照这个样式表来对文 ...
- windows10安装
https://www.microsoft.com/zh-cn/software-download/windows10
- MySQL异步复制-加强版
准备:主备库版本一致,主从库正常安装软件. 1.主库上设置一个复制使用的账户: mysql> grant replication slave,replicate client on *.* to ...
- app相关的一些网站
https://www.qimai.cn 排名排行关键字原aso100
- ASP.NET MVC 母版页
为什么使用母版页?为了整个站点样式统一,任何WEB应用程序都应该使用母版页.MVC框架中,有新的方式为母版页传递数据. 一个WEB应用程序可以包含多个母版页,母版页用于定义页面布局,它与普 ...
- SQL中Between查询日期时需要注意的地方
SQL中Between查询日期时需要注意的地方 某个表某个字段是Datetime型 以"YYYY-MM-DD 00:00:00" 存放 (1).例如数据 2009-01-22 ...