「兔了个兔」我用前端看数学之兔子函数


theme: Chinese-red

image.png
我正在参加「兔了个兔」创意投稿大赛,详情请看:「兔了个兔」创意投稿大赛

兔子函数

前言

最近逛掘金首页时,发现掘金新出一个「兔了个兔」的活动,看完活动简介,我突然想到以前老师给介绍过兔子数列,我想可以以这个为主题进行创作,于是便有了这篇文章。

正文

兔子数列

定义

兔子数列(Rabbit Sequence)是一种数学概念,它是一个递归的序列,其中的每个数字都是前两个数字的和。这个数列有着广泛的应用,在数学和计算机科学中都有所涉及。

兔子数列的通项公式为:
F(n) = F(n-1) + F(n-2) (n ≥ 3)
其中,F(n) 表示兔子数列中的第 n 个数字,F(1)=1 和 F(2)=1。

看完介绍是不是对兔子数列有一定认识啦?如果你对兔子数列还有疑惑,你可以看看下面的例子

示例

(默认第1项、第2项都是1)
从第3项开始,每一项都是前两项之和:

动画.gif

例子是我写的一个前端代码,每点击一次下一个数,表格内就会输出兔子数列的下一个数,是不是很简单呀(代码在文末码上掘金,需要的小伙伴可以自取)

简单介绍完兔子数列,我来说说兔子数列的代码实现。

代码实现

首先,在介绍兔子数列的代码实现之前,我们先来了解一下递归函数。

递归函数是一种常见的编程技术,它可以让我们在函数内部调用自身,从而实现解决递归问题的目的。

简单来说,递归函数能自己调用自己,从而帮助我们更方便的实现兔子数列

JavaScript代码实现:

function rabbitSequence(n) {
  // 递归终止条件
  if (n === 1 || n === 2) {
    return 1;
  }
  // 递归调用
  return rabbitSequence(n - 1) + rabbitSequence(n - 2);
}

你可以简单地试一试这个函数

console.log(rabbitSequence(1)); // 输出 1
console.log(rabbitSequence(2)); // 输出 1
console.log(rabbitSequence(3)); // 输出 2
console.log(rabbitSequence(4)); // 输出 3
console.log(rabbitSequence(5)); // 输出 5
console.log(rabbitSequence(6)); // 输出 8

题目实战

为了更好的展示兔子数列,这里我准备了几道算法题供大家参考,小伙伴们可以在试着做做,每道题都写了我的思路和示例题解供大家参考。

题目一:新春兔子繁殖

题目描述:

春节期间,小明家的兔子繁殖得非常快,一开始只有一只兔子,但是每个月会生出一对小兔子。小兔子出生后三个月之后就会变成成年兔子,并且每个月又会生出一对小兔子。请问,小明家 n 个月之后会有多少只兔子?

输入:
一个整数 n (1 ≤ n ≤ 30),表示小明家兔子繁殖的月数。

输出:
一个整数,表示小明家 n 个月之后会有多少

解题思路:

我可以先求一下前10项:

当n=1时,兔子的数量为:1(只)
当n=2时,兔子的数量为:1(只)
当n=3时,兔子的数量为:2(只)
当n=4时,兔子的数量为:3(只)
当n=5时,兔子的数量为:5(只)
当n=6时,兔子的数量为:8(只)
……

有没有感觉很眼熟?这不就是前文所讲的兔子数列嘛
因此,本题可以套用兔子数列的实现思路:

若 n=1 或 n=2,则小明家的兔子数量为 1。
若 n>2,则小明家的兔子数量为前两个月的兔子数量之和。

根据以上分析,我们可以得出递推式为 F(n) = F(n-1) + F(n-2) (n ≥ 3),其中 F(n) 表示小明家的兔子数量,F(1)=1 和 F(2)=1。

因此,我们可以使用递归的方式来求解本题
流程图:

graph LR
a("n") --> A
A("n=1 或 n=2") --> B("返回 1")
a --> C("F(n) = F(n-1) + F(n-2)")
C --> D("F(n-1)")
C --> E("F(n-2)")
D --> C
E --> C

代码实现:

function rabbitCount(n) {
  // 递归终止条件
  if (n === 1 || n === 2) {
    return 1;
  }
  // 递归调用
  return rabbitCount(n - 1) + rabbitCount(n - 2);
}

练习题

这里给出一道练习题目,思路和上一道题目类似

给定一个数字 n,求出它的阶乘(factorial)。

例如,输入 5,则输出 120。

输入:

一个整数 n (1 ≤ n ≤ 10)。

输出:

一个整数,表示 n 的阶乘。

进阶:能不能优化递归算法?

总结

在本文中,我介绍了兔子数列的定义、公式,演示了如何使用 JavaScript 来实现兔子数列,并介绍了如何使用兔子数列来求解算法题,希望能对大家有所帮助。
jcode

© 版权声明
THE END
喜欢就支持一下吧
点赞7 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容