c语言递归求差分方程,如何使这个简单的递推关系(差分方程)尾递归?

@bytebuster的解决方案很好,但他没有解释他是如何创建它的,所以它只会帮助解决这个特定的问题。顺便说一句,你的公式看起来有点像斐波纳契(但不完全),它可以是calculated analytically without any looping(即使没有循环隐藏在Seq.unfold)。

你开始用下面的函数:

let rec f0 n =

match n with

| 0 | 1 | 2 -> 1

| _ -> f0 (n - 2) + f0 (n - 3)

的函数调用f0的参数n - 2和n - 3,所以我们需要知道这些值。诀窍是使用dynamic programming(可以使用memoization完成),但由于您不想使用memoization,所以我们可以手动编写它。

我们可以写f1 n,它返回一个三元组元组,其当前值和两个过去值为f0。这意味着f1 n = (f0 (n - 2), f0 (n - 1), f0 n):

let rec f1 n =

match n with

| 0 -> (0, 0, 1)

| 1 -> (0, 1, 1)

| 2 -> (1, 1, 1)

| _ ->

// Here we call `f1 (n - 1)` so we get values

// f0 (n - 3), f0 (n - 2), f0 (n - 1)

let fm3, fm2, fm1 = (f1 (n - 1))

(fm2, fm1, fm2 + fm3)

此功能无法尾recurisve,但它只是递归调用自己一次,这意味着我们可以使用蓄能器参数的模式:

let f2 n =

let rec loop (fm3, fm2, fm1) n =

match n with

| 2 -> (fm3, fm2, fm1)

| _ -> loop (fm2, fm1, fm2 + fm3) (n - 1)

match n with

| 0 -> (0, 0, 1)

| 1 -> (0, 1, 1)

| n -> loop (1, 1, 1) n

我们需要处理参数0和1专门在fc的主体中。对于任何其他输入,我们从最初的三个值(即(f0 0, f0 1, f0 2) = (1, 1, 1))开始,然后循环n次执行给定的递归步骤,直到达到2为止。递归loop函数是@bybbuster的解决方案使用Seq.unfold实现的。

所以,你的函数有一个尾递归版本,但只是因为我们可以简单地将过去的三个值保存在一个元组中。一般来说,如果计算出您需要的先前值的代码做了更复杂的事情,则这可能不可行。

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

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

相关文章

android text 字体设置,Android TextView个别字体格式设置小结

android 在同一个TextView中如何展现出不同的字体和颜色总结一下1.主要是痛通过String.xml使用html标签静态配置然后动态引用Html.fromHtml(getResources().getString(R.string.myHeadStr));2.textView 动态设置//创建一个 SpannableString对象 msp new SpannableString("…

android 图片合成pdf文件,教你怎么把多张图片合成一个pdf文件

当你遇到需要把多张图片合并成一个pdf文件时,你需要怎么做?可能有些朋友会说下载一个pdf格式转换工具,其实不必这么麻烦,你只要把文件上传到在线迅捷pdf转换器,就可以一站式帮你搞定pdf文件的格式转换以及一些常用的功能操作(如p…

android中的xml布局文件如何引用另一个xml布局文件,引用另一个layout.xml文件而不复制它...

如果我理解正确提问者对XLARGE和SW-600dp的一个布局文件,另一个用于所有的休息。无论如何,当我偶然发现这个问题时,就是这样。可以通过创建文件夹layout-xlarge和layout-s600dp来解决这个问题,并在每个文件夹中放置一个布局文件&a…

华为系统鸿蒙优势,华为鸿蒙2.0可以替代安卓吗,华为鸿蒙2.0优势在哪

在华为开发者大会上,华为消费业务CEO 余承东,正式发布鸿蒙OS2.0,并宣布华为鸿蒙OS将全面启用全场景生态,并将于2020年12月发布手机版。余承东还表示,明年,华为的智能手机将全面升级,以支持鸿蒙操…

网页自动关机代码HTML,win10系统打开邮件显示网页html源代码如何解决

有不少win10系统用户在打开邮件的时候,发现内容全是显示网页的html源代码,无法看到内容,遇到这样的问题该怎么办呢,通常是自带的"邮件和日历"应用暂时不支持查看HTML格式的邮件,下面给大家分享一下具体的解决…

android 界面长按,Android 主界面长按创建快捷方式

Android中创建快捷方式主要有两种方式。一是在代码中直接加入生成桌面快捷方式的代码;二是通过小部件加入;这篇文章主要讲另外一种方法!1、通过在AndroidManifest文件里为Activity加入加入之后。长按桌面,小部件中会有你应用的图标出现&#…

android+fastboot+命令,Android手机fastboot刷机命令

先进入fastboot文件所在目录连接硬件命令fastboot devices删除recover、boot,system同理Fastboot erase recovery重刷,boot,system同理Fastboot flash recovery cn170.img只需将boot.img和system.img刷入系统即可完成系统的刷新恶补:FASTBOOT命令有加载驱动 | fastb…

retrofit 2.0 android 教程,初识Retrofit2.0

Retrofit无疑是当下最流行的Android网络请求框架了,是Square提供的开源产品。官方网站是这样介绍Retrofit的—-A type-safe HTTP client for Android and Java,为Android平台的应用提供一个类型安全的HTTP客户端。Retrofit 是一套注解形式的网络请求封装…

怎么创建计算机快捷方式到桌面两种方法,使用脚本主机创建Windows快捷方式 - Windows Client | Microsoft Docs...

如何使用脚本宿主创建Windows快捷方式12/03/2020本文内容本文介绍如何通过使用 Microsoft Windows Script Host (WSH) Visual FoxPro 创建桌面快捷方式。适用于: Windows 10 - 所有版本,Windows Server 2012 R2原始 KB 编号: 244677摘要WS…

swagger-ui.html 404,解决访问swagger2报404问题

近来为了项目的接口文档,而集成了swagger2,但是集成完毕后,访问swagger-ui.html却报404,检查后发现,原来是被拦截了。下面写一下我的解决方法。首先新建 WebConfig类实现WebMvcConfigurer接口,WebMvcConfig…

正确使用计算机说课稿,《初识计算机》说课稿

说课稿我说课的题目是《初识计算机》首先说教材,我校信息技术课程没有专用教材,依据柳河县教师进修学校小学三年级信息技术考核标准,我根据大连理工出版社出版的小学信息技术教材内容进行修改之后,用于我校三年级信息技术课程。本…

小学生学计算机编程的必要,小学生学编程,真的那么重要吗

原标题:小学生学编程,真的那么重要吗编程简单的说就是告诉计算机要做什么。人类需要将解决问题的思路、方法和手段通过计算机能够理解的形式告诉计算机,使得计算机能够根据人的指令一步一步去工作,完成某种特定的任务。计算机是迄…

家用计算机机箱怎么选,DIY装机怎么选择电脑机箱 新手必读的电脑主机箱选购指南...

在这个讲究颜值的时代,对于一些主要外观的外观党来说,内外皆修的机箱也是算重要的。DIY装机怎么选择电脑机箱?下面装机之家小编就来谈下新手必读的电脑主机箱选购指南,对于装机选择机箱困难症的朋友不妨来看看。一、首先要明白自己…

计算机启动应用程序的方法,excel的程序_Excel2010中启动应用程序的三种方法

使用Excel时,需要先启动应用程序,怎么去进行操作启动它?今天,学习啦小编就教大家在Excel2010中启动应用程序的三种方法。Excel2010中启动应用程序的三种步骤如下:1.开始菜单在桌面上,单击“开始”,“所有程…

西安工业学院计算机系王翊,西安文理学院艺术学院

“爱的长歌”声乐教学与实践汇报音乐会——王翊师生音乐会圆满结束6月26日我院第八场“爱的长歌”声乐教学与实践汇报音乐会—王翊师生音乐会圆满结束。音乐会受到老师和同学的一致赞誉。整场音乐会高潮迭起,掌声不断。音乐会的学生由16级音乐表演专业的声乐方向的同…

计算机控制系统的稳态误差,计算机控制系统的稳态误差.doc

计算机控制系统的稳态误差计算机控制系统报告--计算机控制系统的稳态误差在计算机控制系统中存在稳态误差。怎样计算稳态误差呢?在连续系统中,稳态误差的计算可以通过两种方法计算:一是建立在拉氏变换中值定理基础上的计算方法,可…

梦见计算机房,梦见未来家里有机房是什么意思?

吉凶指数:88(由佛滔居士根据数理文化得出,仅供参考)梦见未来,代表的是成就与幸福。梦见未来,通常免征希望,生活将出现转变。女性梦见未来,表明你是一名很有头脑的女性。这个梦预示着你将来的生活很富足也很…

计算机如何制作U盘启动盘,电脑如何制作U盘启动盘

为什么要制作U盘启动盘?U盘启动盘是什么?今天小编和大家普及一下,什么是U盘启动盘。就是一个简简单单的U盘,经过装机工具软件就变成了一个装有PE镜像文件的U盘,通过这个启动盘可以进入PE系统对电脑进行重装系统。话不多…

c 服务器二次验证码,V5验证官网 - 基础套餐免费 -滑块验证,行为验证,防刷验证 - 文档...

平台对接V5验证前后端对接流程如下图所示:前后端调用时序图对接V5验证分为业务网站后台api对接以及业务前端代码引入两部分。业务网站后台获取验证Token及验证服务器(getToken)用于网站后台定时通过V5控制台刷新获取验证所需要的Token及验证服务器地址。Token有效期…

战队服务器人员位置,和平精英:职业战队如何分配成员位置?5大定位划出5种职位...

#百度APP&百家号杯和平精英#随着时间的推进,距离百家号杯的决赛越来越近了;一百只精英队伍你争我抢都想要争取冠军的宝座。在最新的一场循环赛当中SC战队以70分的总积分占领榜首,Dae战队以69分的总积分紧随其后排名第二。虽说SC拿到了循环…