算法递归简论

【0】README

0.1) 本文总结于 数据结构与算法分析,旨在了解设计 递归程序 的相关法则和技巧;
0.2) 我记忆尤新的一点是: 凡事可以用循环代替的递归函数,它就不是一个好的递归函数,对我帮助很大;(设计完递归函数后,可以检验下,该递归函数是否可以用循环代替)


【1】 递归简论

1.1)当编写递归例程的时候,关键是要牢记递归的四条基本法则-Principle:

  • P1)基准情形:必须总是有某些基准情形,它无需递归就能解除;
  • P2)不断推进:对于那些需要递归求解的情形,每一次递归调用都必须要是求解状况朝接近基准情形的方向前进;
  • P3)设计法则:假设所有的递归调用都能运行;
  • P4)合成效益法则(compound interest rule):在求解一个问题的同一实例时, 切勿在不同的递归调用中作重复性工作 ;

【2】看三个荔枝:

  • 2.1)荔枝1
    代码参见 https://github.com/pacosonTang/dataStructure-algorithmAnalysis/blob/master/chapter1/p6.c)
    source code at a glance :
#include<stdio.h>/* 满足F(0)=0 且 F(X)=2F(X-1)+X^2 */int F(int);int main()
{    for(int i = 0; i <= 10; i++)printf("F(%d) = %-4d\n",i,F(i));         
}int F(int x)
{if(x == 0)return 0;else return 2 * F(x - 1) + x * x;
}

这里写图片描述
这里写图片描述

  • 2.2)荔枝2(一个错误的递归函数)
    source code at a glance :

这里写图片描述

  • 2.3)荔枝3

(代码参见 https://github.com/pacosonTang/dataStructure-algorithmAnalysis/blob/master/chapter1/p8.c)
source code at a glance :

#include<stdio.h>/*打印整数的递归例程, 如1234 打印为 1 2 3 4*/
void printout(unsigned int N);main()
{    int temp = 1234554;printf("%d 可分解为 ",temp);    printout(temp);printf("\n");
}void printout(unsigned int N)
{if(N >= 10)printout(N / 10);printf(" %d",N % 10);
}

这里写图片描述
这里写图片描述

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

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

相关文章

python三维矩阵可视化_科学计算三维可视化---Mlab基础(基于Numpy数组的绘图函数)...

Mlab了解Mlab是Mayavi提供的面向脚本的api&#xff0c;他可以实现快速的三维可视化&#xff0c;Mayavi可以通过Mlab的绘图函数对Numpy数组建立可视化。过程为&#xff1a;.建立数据源.使用Filter(可选)对数据进行加工.添加可视化模块&#xff0c;我们可以通过修改可视化模块的属…

程序员求职面试三部曲之二:提高面试的成功率

一、选择有招聘诚意的企业 一则好的招聘信息应该是准确、清晰和真实的。任何夸大宣传、提供虚假信息的企业都可以认为缺乏招聘诚意。 我们通过解读企业的招聘信息&#xff0c;主观上能够判断这家企业是否很有招聘诚意&#xff0c;我觉得主要体现为以下两个方面&#xff1a; 1.、…

秒杀系统设计的 5 个要点:前端三板斧+后端两条路

转载自 秒杀系统设计的 5 个要点&#xff1a;前端三板斧&#xff0b;后端两条路高并发&#xff0c;cache&#xff0c;锁机制基于缓存架构redis,Memcached的先进先出队列。稍微大一点的秒杀&#xff0c;肯定是分布式的集群的&#xff0c;并发来自于多个节点的JVM&#xff0c;syn…

http响应消息的响应状态码和意义

200&#xff1a;表示一切正常&#xff1b;400&#xff1a;无效请求&#xff0c;指出客户机请求中有不正确的语法格式&#xff1b;404&#xff1a;找不到&#xff0c; 服务器上不存在客户机所请求的资源&#xff1b;&#xff08;常见状态码&#xff09;405&#xff1a;不允许此请…

python网络模块_Python的pyroute2网络模块-阿里云开发者社区

Pyroute2是纯python的netlink库&#xff0c;只需要python标准库不需要其他第三方的库。最常用的是监控事件&#xff0c;例如监控磁盘空间事件&#xff1a;from pyroute2 import DQuotSocketwith DQuotSocket() as ds:for messagein ds.get():print(message)或者监控IP路由from …

ASP.NET Core 开发-中间件(Middleware)

ASP.NET Core开发&#xff0c;开发并使用中间件(Middleware)。 中间件是被组装成一个应用程序管道来处理请求和响应的软件组件。 每个组件选择是否传递给管道中的下一个组件的请求&#xff0c;并能之前和下一组分在管道中调用之后执行特定操作。 具体如图&#xff1a; 开发中间…

高性能、高可用平台架构的演变过程

转载自 高性能、高可用平台架构的演变过程开篇概述 在如今移动互联网、互联网、大数据的时代&#xff0c;各类的互联网网站、平台异常突起&#xff0c;如同雨后春笋&#xff0c;有种“忽如一夜春风来&#xff0c;千树万树梨花开”感觉。 对于移动互联网时代的平台来说&#xff…

6 使用soap客户端_网络协议 20 - RPC 协议(上)- 基于XML的SOAP协议

上一节我们了解 RPC 的经典模型和设计要点&#xff0c;并用最早期的 ONC RPC 为例子&#xff0c;详述了具体的实现。而时代在进步&#xff0c;ONC RPC 逐渐因为各种问题被替代&#xff0c;SOAP 协议就是替代者之一。ONC RPC 存在的问题ONC RPC 将客户端要发送的参数&#xff0c…

关于HashMap容量的初始化,还有这么多学问

转载自 关于HashMap容量的初始化&#xff0c;还有这么多学问在《HashMap中傻傻分不清楚的那些概念》文章中&#xff0c;我们介绍了HashMap中和容量相关的几个概念&#xff0c;简单介绍了一下HashMap的扩容机制。文中我们提到&#xff0c;默认情况下HashMap的容量是16&#xff0…

Microservice Anti-patterns

在最近的一次Microservices Practitioner Summit中&#xff0c;原Netflix工程师介绍了一种越来越常见的对Microservice的误用。简单地说&#xff0c;大家在搭建一个基于Microservice的服务时常常依赖同一套类库&#xff0c;进而使得Microservice中的各个子服务无法选择最适合的…

css 图片换行_好程序员web前端学习路线分享CSS浮动-文档流篇

1、纯文本的排列。文档流就像我们的文本内容一样&#xff0c;所有的文字都会紧挨着&#xff0c;一个个排列下来&#xff0c;如果到了边界&#xff0c;就会换一行排列。当然如果敲回车或者按下空格键一般都会认为是一个词间距&#xff0c;因为英文中每个单词之间是有距离的&…

京东购物车的 Java 架构实现及原理

转载自 京东购物车的 Java 架构实现及原理 今天来写一下关于购物车的东西, 这里首先抛出四个问题: 1&#xff09;用户没登陆用户名和密码,添加商品, 关闭浏览器再打开后 不登录用户名和密码  问&#xff1a;购物车商品还在吗&#xff1f; 2&#xff09;用户登陆了用户名密…

程序员求职面试三部曲之三:快速适应新的工作环境

新进一家公司总有各种的不适应&#xff0c;或兴奋&#xff0c; 或紧张&#xff0c;或不安&#xff0c;或迷茫各种情绪兼而有之。曾经有个家伙好不容易进了A公司&#xff0c;本来是要替代另一位即将离职的小伙伴的&#xff0c;结果&#xff0c;走得比那位兄弟还快&#xff0c;只…

问的书写规则是什么意思_化学式的定义及其书写规则

化学式的定义及其书写规则化学式是用元素符号表示纯净物组成及原子个数的式子。分子晶体的化学式叫做分子式&#xff0c;可以表示这种物质的分子构成。下面是百分网小编给大家整理的化学式的简介&#xff0c;希望能帮到大家!化学式的定义用元素符号表示纯净物组成及原子个数的式…

微软企业应用开发三大方向:跨平台、开放/开源与DevOps

软件和互联网正在改变传统企业&#xff0c;软件的职能逐渐从管理内部员工变成核心的商业竞争能力&#xff0c;在今天这种大环境下&#xff0c;我们应该用的新开发技术和方法。微软公司全球资深副总裁、开发平台事业部潘正磊&#xff08;Julia&#xff09;认为&#xff0c;把IT托…

Java程序员最常犯的 10 个错误

转载自 Java程序员最常犯的 10 个错误 这个列表总结了Java开发人员经常犯的10个错误。一 、把数组转成ArrayList 为了将数组转换为ArrayList&#xff0c;开发者经常会这样做&#xff1a; List list Arrays.asList(arr); 使用Arrays.asList()方法可以得到一个ArrayList&…

mysql5.1升级5.5_mysql数据库迁移,由版本5.1升级至5.5.29,需要注意哪些

caching_sha2_password认证插件提供更多的密码加密方式&#xff0c;并62616964757a686964616fe59b9ee7ad9431333433636131且在加密方面具有更好的表现&#xff0c;目前MySQL 8.0选用caching_sha2_password作为默认的认证插件&#xff0c;MySQL 5.7的认证插件是MySQL_native_pas…

dotnetConf 2016 线上虚拟大会

为期三天&#xff08;6月7日-9日&#xff09;的Channel9 免费.NET线上虚拟大会&#xff0c;微软产品团队及.NET社区精英一起徜徉在.NET的世界&#xff01; 与大咖Scott Hunter, Miguel de Icaza (Xamarin CTO) , ScottHanselman及其他.NET大牛一起学习如何利用.NET开发跨…

mysql的on和in用法_数据库中in、on、with的用法及示例。

with用法&#xff1a;创建一个表&#xff1a;create table regr (pid integer,id integer, name char(20))alter table regr alter id set not null add primary key(id)insert into regr values(-1,1,library),(1,2,news),(2,3,world news),(2,4,politics),(2,5,bussiness)(2,…

文档数据库RavenDB-介绍与初体验

不知不觉&#xff0c;“.NET平台开源项目速览“系列文章已经15篇了&#xff0c;每一篇都非常受欢迎&#xff0c;可能技术水平不高&#xff0c;但足够入门了。虽然工作很忙&#xff0c;但还是会抽空把自己知道的&#xff0c;已经平时遇到的好的开源项目分享出来。今天就给大家介…