函数递归的课堂练习|学习笔记

简介: 快速学习函数递归的课堂练习。

开发者学堂课程【Scala 核心编程-基础函数递归的课堂练习】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/609/detail/8932


函数递归的课堂练习

 

内容介绍

一、案例一

二、案例二

三、案例三

 

关于函数的递归,下面布置了三个题。

 

一、案例一

1、题1:斐波那契数

请使用递归的方式,求出斐波那契数1,1,2,3,5,8,13...

给你一个整数 n,求出它的斐波那契数是多少?

首先新建一个 object 类 Exercise01,写入函数 def,名称为 fbn,传入参数 n 为 Int 类型,最后要返回一个 int,这里在递归的推导时不能使用:Unit 形式,后面会讲到,然后进行分析题目:

2、思路分析:

分析题目的当 n=1时,返回值为1,当 n=2时返回值也为1,当 n=3也就是 n>2时,返回值为前面两个数相加,返回值为3。

3、代码的实现:

package com. atguigu. chapter05. recursive

object Exercise01 {

def main(args: Array[String]): Unit = {

println("fbn的结果是=”+ fbn(3)) //进行输出 fbn(3)的结果,输出应该为2

}

//函数

def fbn(n: Int): Int = {

//分析

//1.当 n=1结果为1

//2.当 n=2结果是1

//3. 当 n> 2,结果就是前面两个数的和

if(n==1|| n==2){ //如果当 n=1或者 n=2时则返回值1

1

} else {  //如果大于2,则执行下面语句

fbn(n-1)+fbn(n-2)  //不需要 return,最后一行就代表了结果

}

}}

运行结果:

D: \program\jdk8\bin\java

fbn 的结果是=2

可以看到运行结果是正确的。那如果输出 fbn(7)结果为:

D: \program\jdk8\bin\java

fbn 的结果是=13

运行结果也是正确的,说明案例代码实现成功。

 

二、案例二

1、题2:求函数值[演示]

已知f(1)=3; f(n) = 2*f(n-1)+1;

请使用递归的思想编程,求出 f(n)的值?(就是简单的套用公式即可)

2、代码实现如下:

println(f(2))  //进行输出 f((2)),运行结果应该为7

}

def f(n: Int): Int = {  //函数f传入参数 n,返回为 Int,

if (n ==1) {  //进行判断如果 n=1,则返回3

3

}else {  //否则,执行下面语句

2 *f(n-1)+1  //题目给出的公式

}

运行结果:

D: \program\jdk8\bin\java

fbn的结果是=13

7

可以看到输出结果为7,说明案例2实现成功。


三、案例三

1、题3:猴子吃桃子问题

有一堆桃子,猴子第一天吃了其中的一半,并再多吃了一个!以后每天猴子都吃

其中的一半,然后再多吃一个。当到第十天时,想再吃时(还没吃),发现只有

1个桃子了。问题:最初共多少个桃子?

2、思路分析:

可以知道,第10天时桃子有1个,那么第9天,桃子有(1+1)×2个,就是(day10[1]+1)×2,第8天时桃子就有(day9[?]+1)×2个,day9时有4,通过以上分析规律就清楚了,规律为要算前一天的桃子数就要把后一天的桃子数加一再乘以2。

3、代码实现:

println(“桃子个数=“+peach(1)) //输出结果应该为1534

}

/*分析思路

1.day=10桃子有1

2. day = 9桃子有(day10[1] + 1) *2

3.day=8桃子有(day9[4]+1)*2

*/def peach(day: Int): Int = { //传入要求第几天的桃子数,返回类型为整数

if (day ==10) {//如果传入天数为10则返回1

} else {

(peach(day + 1) + 1) * 2  //比如要算第9天的数量,就是((9+1)+1)*2,这里的逻辑是从后往前推,与前面的从前往后推不同

}

}

运行结果:

运行结果:

D: \program\jdk8\bin\java

桃子个数=1534

以上就是使用 scala 完成递归的应用案例

相关文章
|
5月前
|
C语言
C语言学习记录——用递归思想求第n个斐波那契数,函数递归
C语言学习记录——用递归思想求第n个斐波那契数,函数递归
26 0
链表翻转循环和递归写法(画图分析)
链表翻转循环和递归写法(画图分析)
32 0
|
算法 C语言
【C语言】——函数--递归及习题练习
【C语言】——函数--递归及习题练习
初阶函数递归经典例题(1)
初阶函数递归经典例题(1)
【C语言】函数和递归的基础题目
【C语言】函数和递归的基础题目
|
算法
【学习笔记之我要C】函数递归
【学习笔记之我要C】函数递归
57 0
|
算法 程序员 编译器
【C】掌握函数基本知识+理解函数递归
【C】掌握函数基本知识+理解函数递归
91 0
【C】掌握函数基本知识+理解函数递归
|
算法 程序员 编译器
|
算法 C语言
C语言学习笔记—P9(函数<2>+递归+图解+题例)
C语言学习笔记(函数<2>+递归+图解+题例)
104 0
C语言学习笔记—P9(函数<2>+递归+图解+题例)