小问题,对递归重复调用的改进,一起来分享


Problem
设有一头小母牛,从出生第四年起每年生一头小母牛,按此规律,第N年时有几头母牛?

Input
本题有多组数据。每组数据只有一个整数N,独占一行。(1≤N≤50)

Output
对每组数据,输出一个整数(独占一行)表示第N年时母牛的数量

Sample Input
1
4
5
20

Sample Output
1
2
3
872

------------------------------------
最容易写出来的

解决方法很简单:母牛数等于自己加上它生的小牛数,再加上它的小牛们自己生的小牛,如此递归。


/*
此解答未被Accept
原因:运算时间超时(1200ms,而时间限制在1000ms)
*/
#include<stdio.h>

int F(int n)
{
 int res = n<4?0:n-3;//该母牛所生的小牛数

 if(n>=4)
 {
  for(int i=1; i<=n-3; i++)//该母牛的每一个孩子再生小牛。
  {
   res += F(i);
  }
 }

 return res;
}

int main()
{
 int n;

 while( scanf("%d",&n) != EOF)
 {
  printf("%d\n",F(n)+1);
 }

 return 0;
 
}

上面解答的弱点是,重复计算(比如F(1)被。每一个小牛掉用了,被每一个小牛的每一个孩子调用了,如此重复下去),导致时间开销很大。
----------------------------
改进的:

为了避免重复运算,我们将用一个数组保存已经被计算过的值,由于函数F的任何计算的结果都不会是
-1,那么我们设置数组的初始值为-1,但检查到其值不为-1时,那么它已经被计算过了,我们就没有必要再计算了。

/*
此解答已通过TongJi编译,并接收
 User        Result   Memory Time  Language Date 
 zhouyinhui  Accepted 56 k   2ms   C++      2006-05-06 16:32:02
*/
 
#include<stdio.h>
#include<malloc.h>

int* arr;//用于保存运算结果,避免递归调用中的重复运算

int F(int n)
{
 int res = n<4?0:n-3;

 if(n>=4)
 {
  
  for(int i=1; i<=n-3; i++)
  {
   if( *(arr+i) == -1 )//如果未运算该F(i)
   {
    *(arr+i) = F(i);//则运算并保存结果
   }
   res += *(arr+i);  

  }
  
 }

 return res;
}

int main()
{
 int n;

 while( scanf("%d",&n) != EOF)
 {
  int *array = (int *)malloc(n*4);
  for(int i=0; i<n; i++)
  {
   *(array+i) = -1;
  }

  arr = array;

  printf("%d\n",F(n)+1);
 }

 return 0;
 
}





 

转载于:https://www.cnblogs.com/zhouyinhui/archive/2006/05/06/392719.html

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

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

相关文章

拦截游戏窗口被移动_Ruined King官网版-拳头rpg Ruined King游戏最新版下载v1.0

Ruined King是一款暗黑风格的动作冒险类手游&#xff0c;游戏采用回合制战斗方式为玩家进行呈现&#xff0c;多种强大的英雄需要玩家进行召集&#xff0c;大幅度提升角色的战斗力&#xff0c;丰富的任务等着玩家来完成&#xff0c;游戏中还有非常经典的剧情让玩家进行了解&…

AI开始卷高考了,英语已被卷到134分??

文 | 天于刀刀AI 真的太卷了&#xff01;不但模型之间互相卷&#xff0c;现在直接开始和人类学生一起卷高考了&#xff01;近期&#xff0c;来自 CMU 两位学者提出的重构预训练模型&#xff08;reStructured Pre-training, RST&#xff09;在只有 GPT-3 十六分之一参数量的情况…

(待解)静态构造器和静态字段调用的相互嵌套

示例代码&#xff1a;usingSystem;classA{ public static int X; static A() { X B.Y 1; }}classB{ public static int Y A.X 1; static B() {} static void Main() { Console.WriteLine("X {0}, Y {1}", A.X, B.Y); }}程序输出&#…

程序员面试金典 - 面试题 04.12. 求和路径(二叉树递归)

1. 题目 给定一棵二叉树&#xff0c;其中每个节点都含有一个整数数值(该值或正或负)。 设计一个算法&#xff0c;打印节点数值总和等于某个给定值的所有路径的数量。 注意&#xff0c;路径不一定非得从二叉树的根节点或叶节点开始或结束&#xff0c;但是其方向必须向下(只能…

一款三搭_冬日穿搭指南!照着这八条万能公式穿,让你不冻还有型_

就用我多年看搭配的经验为大家总结了8条万能公式&#xff01;想要做百岁老人的&#xff0c;冬天穿搭以下每一套都需要穿打底裤的哦&#xff01;&#xff01;&#xff01;公式一&#xff1a;大衣毛衣九分裤同色系袜子是画龙点睛之笔。同时大衣、毛衣和包包也是同色系&#xff0c…

pytorch可视化教程:训练过程+网络结构

文 | 锦恢知乎&#xff08;已授权&#xff09;源 | 极市平台一、网络结构的可视化我们训练神经网络时&#xff0c;除了随着step或者epoch观察损失函数的走势&#xff0c;从而建立对目前网络优化的基本认知外&#xff0c;也可以通过一些额外的可视化库来可视化我们的神经网络结构…

从今天起,开始等待中信世界杯信用卡

特喜欢卡面上克林斯曼凌空一脚的冲击性画面&#xff01;今早上填的申请表&#xff0c;工作人员说会在十四个工作日内答复。现在&#xff0c;作会梦先&#xff1a;&#xff09; 转载于:https://www.cnblogs.com/notus/archive/2006/06/14/425654.html

程序员面试金典 - 面试题 05.07. 配对交换(位运算)

1. 题目 配对交换。编写程序&#xff0c;交换某个整数的奇数位和偶数位&#xff0c;尽量使用较少的指令&#xff08;也就是说&#xff0c;位0与位1交换&#xff0c;位2与位3交换&#xff0c;以此类推&#xff09;。 示例1:输入&#xff1a;num 2&#xff08;或者0b10&#x…

亚马逊出的平板电脑_亚马逊推出了这款不到400元的平板电脑!学生党的福音!...

说到亚马逊&#xff0c;我们都知道Kindle&#xff0c;但亚马逊研发的电子产品可不止电纸书Kindle&#xff0c;或许很多小伙伴也听说过亚马逊的Kindle Fire 平板电脑&#xff01;亚马逊的平板电脑在国内或许不太出名&#xff0c;但在国外凭借着亚马逊强大的平台&#xff0c;Fire…

工作项跟踪管理系统需求

工作项跟踪管理系统需求 WIT &#xff08;Work Item Track&#xff09; 包含&#xff1a;缺陷跟踪、任务指派、突发事件处理、需求管理、客户定制 体现&#xff1a;流程性、规范性、流程可定制性 目的&#xff1a;帮助大家把工作做好、让工作更轻松、使得工作具有可管理性 …

程序员面试金典 - 面试题 08.03. 魔术索引(二分递归)

1. 题目 魔术索引。 在数组A[0…n-1]中&#xff0c;有所谓的魔术索引&#xff0c;满足条件A[i] i。 给定一个有序整数数组&#xff0c;编写一种方法找出魔术索引&#xff0c;若有的话&#xff0c;在数组A中找出一个魔术索引&#xff0c;如果没有&#xff0c;则返回-1。 若有…

Meta提出九头蛇注意力机制,比传统注意力快197倍,且准确率更高!

文 | 丰色 发自 凹非寺源 | 量子位尽管Transformer已经开始在诸多视觉任务上“大展身手”&#xff0c;但还有一个问题。那就是在处理大图像上计算比较费劲。比如面对一个1080p的图时&#xff0c;它会有超过60%的计算量都耗费在了创建和应用注意矩阵上。究其原因&#xff0c;主要…

怎么画单极交流放大电路波形图_区别在哪?:VCC、VDD、VEE、VSS、数字地、模拟地、信号地、交流地、直流地!...

【smt接单中】热烈祝贺张飞电子正式建成多条进口贴片加工流水线&#xff0c;下单送视频&#xff0c;狂优惠3个月&#xff01;&#xff01;&#xff01;张飞电子&#xff0c;smt加工&#xff0c;接单客服如下&#xff1a;客服小姐姐:笑笑 客服小姐姐:萌萌电话:18994463546 …

母版页(Master Pages)--轉載

母版页&#xff08;Master Pages&#xff09; http://blog.csdn.net/iiboy/  ASP.NET 1.x中最突出的缺点之一是它缺少对页面模板的支持。欠缺的是定义其他页面可以继承的“母版页”能力。开发人员通过使用用户控件&#xff08;它们可以容易地在页面之间复制&#xff09;创建页…

清华团队训了个AI,掌握了互联网流量密码…

随着NLP深入发展&#xff0c;AI写作风生水起。如果说自媒时代&#xff0c;UGC&#xff08;User Generated Content&#xff0c;用户生成内容&#xff09;是主流&#xff1b;智媒时代&#xff0c;AIGC是否会爆火&#xff1f;早听说过用AI写文章&#xff0c;以前小编我也试过用一…

程序员面试金典 - 面试题 08.10. 颜色填充(BFS/DFS)

1. 题目 颜色填充。编写函数&#xff0c;实现许多图片编辑软件都支持的“颜色填充”功能。 给定一个屏幕&#xff08;以二维数组表示&#xff0c;元素为颜色值&#xff09;、一个点和一个新的颜色值&#xff0c;将新颜色值填入这个点的周围区域&#xff0c;直到原来的颜色值全…

excel两列数据对比找不同_Excel“找不同”小妙招来啦,请查收

1、同表格两列数据找不同(1)对应位置找不同方法&#xff1a;选中待对比区域&#xff0c;按【Ctrl】组合键即可将不同之处标注出来。(2)位置不定找不同方法&#xff1a;依次点击“开始——条件格式——突出显示单元格显示规则——重复值”&#xff0c;然后设置对应突出显示颜色即…

谷歌PaLM杀疯了,已从语言模型进化成机器人大脑??

文 | 天于刀刀开篇小编想了解一下&#xff0c;有多少小伙伴和我一样在看完《复联》后对钢铁侠托尼的智能管家贾维斯非常眼馋&#xff0c;然后坚定了自己 all in 人工智能算法这条&#xff08;不归&#xff09;路的&#xff1f;理想中&#xff1a;你是个成熟的 AI 管家&#xff…

程序员面试金典 - 面试题 17.04. 消失的数字(数学/位运算)

1. 题目 数组 nums 包含从0到n的所有整数&#xff0c;但其中缺了一个。 请编写代码找出那个缺失的整数。你有办法在O(n)时间内完成吗&#xff1f; 注意&#xff1a;本题相对书上原题稍作改动 示例 1&#xff1a; 输入&#xff1a;[3,0,1] 输出&#xff1a;2示例 2&#xff1…

前两年在MSDN里找到的HTC示例,一直没用过,先在这里存个备份

下载地址&#xff1a;http://files.cnblogs.com/bobowu/HTC%20Sample%20from%20MSDN.zip包括&#xff1a;calendar、colorpick、coolbar、dataselect、imagerollover、mask、menu、movable、mpc、rowover、slider、tooltips最近只用过movable来实现在地图的拖动效果&#xff0c…