程序员数学 | 数学归纳法

news2024/9/29 4:04:50

目录

    • 一、数学归纳法是什么
    • 二、使用编程来模拟数学归纳法的证明

人类做重复性的劳动没有效率,而计算机却能更快更准确的完成重复性劳动。所以以重复为特点的迭代法在编程中有着⼴泛的应⽤。实际项目中是否可以用不断更新变量值或者缩小搜索的区间范围的方法,来获得最终的解(或近似解、局部最优解)?如果是,那么你就可以尝试迭代法。

程序员数学 | 迭代法

还有某些特定的迭代问题,其实可以用数学归纳法,避免⼀步步的计算,直接从理论上证明某个结论,节约⼤量的计算资源和时间。

一、数学归纳法是什么

数学归纳法最早出现于Francesco Maurolico的Arithmeticorum libri duo(1575年)。Maurolico利用递推关系巧妙地证明出前n个奇数的总和是n^2,由此总结出了数学归纳法。

在数论中,数学归纳法(Mathematical Induction)是以一种不同的方式来证明任意一个给定的情形都是正确的(第一个,第二个,第三个,一直下去概不例外)的数学定理。

对于类似⽆穷数列的问题,我们通常可以采⽤数学归纳法来证明。

  • 常见的数学归纳法是证明当n等于任意一个自然数时某命题成立。证明分下面两步:
    1.证明当n= 1时命题成立。
    2.假设n=m时命题成立,那么可以推导出在n=m+1时命题也成立。(m代表任意自然数)

依然用那个麦子的故事举例:

棋盘的第⼀个小格内放⼊⼀粒麦子,在第⼆个小格内放⼊两粒,第三小格内放⼊给四粒,以此类推,每⼀小格内都⽐前⼀小格加⼀倍的麦子,直到放满64个格子。

为了便于理解,我们将这一命题分为两个命题来证明:
1、第 n n n个棋格放的麦粒数为 2 n − 1 2^{n-1} 2n1
2、前 n n n个棋格放的麦粒数总和为 2 n − 1 2^{n}-1 2n1

  • 先来证明第⼀个子命题:
    1)当 n = 1 n=1 n=1的时候,第⼀格内的⻨粒数为 1 1 1,和 2 1 − 1 2^{1-1} 211相等。
    2)假设第 n − 1 n-1 n1格的⻨粒数为 2 n − 2 2^{n-2} 2n2。那么第 n n n格的⻨粒数为第 n − 1 n-1 n1格的 2 2 2倍,也就是 2 n − 2 ∗ 2 = 2 n − 1 2^{n - 2}*2=2^{n-1} 2n22=2n1

所以,第⼀个子命题成⽴。

  • 再证明第⼆个子命题。
    1) n = 1 n=1 n=1的时候,所有格⼦的⻨粒总数为 1 1 1
    2)假设前 n − 1 n-1 n1格的⻨粒总数为 2 n − 1 − 1 2^{n-1}-1 2n11,基于前⼀个命题的结论,第n格的⻨粒数为 2 n − 1 2^{n-1} 2n1。那么前 n n n格的⻨粒总数为 ( 2 n − 1 − 1 ) + ( 2 n − 1 ) = 2 ∗ 2 n − 1 − 1 = 2 n − 1 (2^{n-1}-1)+(2^{n-1})=2*2^{n-1}-1=2^{n}-1 (2n11)+(2n1)=22n11=2n1

第二个子命题也成立。

和使用迭代法的计算相比,数学归纳法最⼤的特点就在于“归纳”⼆字。它已经总结出了规律,只要我们能够证明这个规律是正确的,就没有必要进⾏逐步的推算,可以节省很多时间和资源。

二、使用编程来模拟数学归纳法的证明

仔细观察⼀下数学归纳法,其实与函数的递归调用很像。

在代码的实现中,我们可以将其转为函数的递归(嵌套)调用,被调用的函数逐步返回 n − 1 n-1 n1时命题是否成⽴,直到被调用的函数回退到 n = 1 n=1 n=1的情况。

递归调用的代码和数学归纳法的逻辑是⼀致的。理解了数学归纳法就很容易理解递归调用。只要数学归纳证明的逻辑是对的,递归调用的逻辑就是对的,稍有不同的是,递归编程的代码需要返回若⼲的变量。

# 初始化第一个格子的麦子数量
grains = [1]

def count_grains(row):
    # 基础情况:如果已经到了第六十四行,返回0表示满了
    if row == 64:
        return 0
    
    # 根据规则,当前行的麦子数量是上一行的两倍
    current_row = grains[row - 1] * 2
    grains.append(current_row)
    
    # 递归计算下一行
    return count_grains(row + 1)

# 使用递归计算所有64行的总麦子数
total_grains = count_grains(1) + grains[-1]
print(f"总共需要的麦子数量为: {total_grains}")

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2175743.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AniJS:无需编程的动画解决方案

前言 在网页设计中,动画效果能够显著提升用户体验,但传统的动画实现往往需要复杂的 JavaScript 代码。 AniJS 库的出现,为设计师和开发者带来了一种全新的动画实现方式,它通过简单的 HTML 属性就能创建出令人惊叹的动画效果。 介…

HTML5+JavaScript绘制闪烁的网格错觉

HTML5JavaScript绘制闪烁的网格错觉 闪烁的网格错觉(scintillating grid illusion)是一种视觉错觉,通过简单的黑白方格网格和少量的精心设计,能够使人眼前出现动态变化的效果。 闪烁的栅格错觉,是一种经典的视觉错觉…

柯桥小语种学习英语口语培训|被点名时,中文喊“到”,那英文喊什么?

"今日体育课,张老师准时点名。阳光下,同学们精神抖擞,一一应答到。课堂氛围活跃,准备充分,期待精彩训练。"被点名时,中文喊“到”,那英文喊什么? “到”用英语怎么说&…

在WPF中实现多语言切换的四种方式

在WPF中有多种方式可以实现多语言,这里提供几种常用的方式。 一、使用XML实现多语言切换 使用XML实现多语言的思路就是使用XML作为绑定的数据源。主要用到XmlDataProvider类. 使用XmlDataProvider.Source属性指定XML文件的路径或通过XmlDataProvider.Document指定…

5G NR 协议规范表(对应3GPP 协议编号)

文章目录 5G NR 协议规范表(对应3GPP 协议编号)5G 架构相关协议5G 新空口相关协议无线接入网相关协议终端相关协议 5G NR 协议规范表(对应3GPP 协议编号) 5G 架构相关协议 5G 新空口相关协议 无线接入网相关协议 终端相关协议

怎么将其他内容与表单组合成二维码?扫码查看内容填写数据的制作技巧

怎么将视频、图片、文字等内容和表单组合生成二维码?现在用二维码来制作表单收集用户数据是一种很常见的方式,将问题做成表单生成二维码,其他人只需要扫码就能够根据问题来填写自己的反馈信息,更加的简单方便。 那么需要让扫码者…

通用型pdf合并工具,分享7款简单易学的pdf处理软件,日常电脑必备!

日常学习和工作中,我们难免会遇到需要编辑pdf文件的情况。熟悉pdf格式文档的小伙伴都知道,pdf不易于编辑,需要借助专业的pdf编辑软件才能实现。现在pdf编辑、pdf转word、pdf合并、pdf拆分等功能都可以轻松实现。尽管如此,也有不少…

服装品牌小程序展示承载服务

服装大小品牌众多,还包括多区域的门店商家合作批发、咨询等,品牌或经销商想要获得更多生意,线上渠道往往是必备的,品牌宣传、获客转化及持续的信息干货输出等。 线上渠道多样化,尤其是微信、百度、抖音、快手等平台聚…

获取 Jupyter Notebook IPython kernel 在电脑中的目录位置

获取 Jupyter Notebook IPython kernel 在电脑中的目录位置 正文 正文 在 VS code 的 terminal 中或者 Windows 的命令行中使用如下代码即可。 ipython locate运行后得到如下结果: 如图所示,我们获取到了 ipython 的位置。 如果大家觉得有用&#xf…

Arthas redefine(加载外部的.class文件,redefine到JVM里 )

文章目录 二、命令列表2.2 class/classloader相关命令2.2.3 redefine(加载外部的.class文件,redefine到JVM里 )举例1:加载新的代码,jad/mc 命令使用举例2:上传 .class 文件到服务器的技巧 二、命令列表 2.…

童装购买系统小程序的设计

管理员账户功能包括:系统首页,个人中心,用户管理,商家管理,商品分类管理,尺码信息管理,款式信息管理,商品信息管理,在线咨询管理,系统管理 微信端账号功能包…

基于php摄影门户网站

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码 精品专栏:Java精选实战项目…

多输入多输出预测 | NGO-BP北方苍鹰算法优化BP神经网络多输入多输出预测(Matlab)

多输入多输出预测 | NGO-BP北方苍鹰算法优化BP神经网络多输入多输出预测(Matlab) 目录 多输入多输出预测 | NGO-BP北方苍鹰算法优化BP神经网络多输入多输出预测(Matlab)预测效果基本介绍程序设计往期精彩参考资料 预测效果 基本介…

Android Glide(一):源码分析,内存缓存和磁盘缓存的分析,实现流程以及生命周期

目录 一、Android Glide是什么,如何使用? Android Glide是一个由Google维护的快速高效的Android图像加载库,它旨在简化在Android应用程序中加载和显示图像的过程,包括内存缓存、磁盘缓存和网络加载,以确保图像加载的快…

算力共享系统中数据平面和控制平面

目录 算力共享系统中数据平面和控制平面 数据平面 控制平面 算力共享系统举例 控制流程和业务流程,在算力共享系统中举例说明 控制流程 业务流程 算力共享系统中数据平面和控制平面 在算力共享系统中,数据平面和控制平面是两个关键组成部分,它们各自承担着不同的角色…

网络层——IP

IP地址 结构: 由32位二进制数组成,通常用点分的形式被分为四个部分,每个部分1byte,最大值为255。 从功能的角度看,ip地址由两部分组成,网络号和主机号。网络号标识了ip所在的网段,主机号标识了…

AI大模型:揭秘AI产品经理与传统产品经理的差别与转型攻略

引言: 随着ChatGPT等革命性产品的流行,人工智能(AI)在中国的发展势头愈发强劲。众多企业纷纷投身AI领域,希望在激烈的市场竞争中占据有利位置。在这一背景下,AI产品经理成为了一个备受瞩目的职业角色。那么…

智慧环保大数据平台建设方案

1. 智慧环保现状与挑战 随着环境问题日益严重,环境事件频发,如贵州都匀矿渣污染、云南南盘江水污染等,以及癌症高发率的出现,智慧环保建设显得尤为重要。智慧环保旨在通过技术手段提升环境管理和决策的智能化水平。 2. 宏观环境…

ubuntu系统下,c++图形库Matplot++配置

linux下安装c图形库Matplot,使得c可以可视化编程;安装Matplot之前,需要先安装一个gnuplot,因为Matplot是依赖于此库 gnuplot下载链接: http://www.gnuplot.info/ 一、gnuplot下载与安装 step1.进入链接点击Release链…

一文了解ChatGPT的发展浪潮

前言 近一段时间在学Prompt,刚好学到了ChatGPT的一些发展史,因此沉淀一些相关的概念内容。 以下开始本文的讲解~👨🚀 一、AI简述 人工智能发展史上的三次浪潮: 人工智能、机器学习和深度学习的关系: 人…