搜索
首页后端开发php教程母牛生仔的递归算法和非递归算法。

//一只母牛,第二年底生一只母牛和一只公牛,第三年底生一只母牛 ,第五年开始母牛会死。公牛也只能活四年。请问一个农场开始只有一只刚出生的母牛,N年后一共有多少只牛。

//请写一个函数输出结果,用递归和非递归两种方法来实现. 

function cowrecursion($i)
{
	if ($i == 1) //如果是第一年,则1头牛。 
	{
		return 1;
	}
	elseif ($i == 2)
	{
		return 2 + cowrecursion(1); //第一母牛和儿子们+第二母牛第一年		
	}
	elseif ($i == 3)
	{
		return 2 + cowrecursion(2) +  cowrecursion(1); //第一母牛和儿子们+第二母牛第二年 +第三母牛第一年
	}
	elseif ($i ==4)
	{
		return 2 + cowrecursion(3) +  cowrecursion(2);  //第一母牛和儿子们+第二母牛第三年 +第三母牛第二年
	}
	// elseif ($i == 5)
	// {		
		// return cowrecursion(4) +  cowrecursion(3);    //第一母牛死了。公牛也死了。第二母牛第四年 +第三母牛第三年		
	// }
	elseif ($i >= 5)
	{
		return cowrecursion($i-1) +  cowrecursion($i-2);  
	}
}


//非递归方式实现
function cow_norecursion($i)
{
	//实现思路,用数组来存储,value的值表示年限。循环加1.
	$cows = array(1);  //第一年,1头母牛。
	$cowsmale = array();  //用于存储公牛
	
	for ($j=0;$j $value)
		{		
			switch($cows_copy[$key])
			{
				case 1:				
				    break;
				case 2:
				    $cows_copy[] = 1;
				    $cowsmale[] = 1;
				    break;
				case 3:
				    $cows_copy[] = 1;
				    break;
				case 4:
				
				    break;
				case 5:
				    unset($cows_copy[$key]);
				    break;
				
			}
		
		}
	
			
		$cows = $cows_copy;
		
		array_walk($cows, function(&$value, $index){
               if ($value > 0) $value++;
		 });
		
		
		
		$cowsmale_copy = $cowsmale;
	    //循环公牛
		foreach ($cowsmale as $d => $value)
		{			
		    $cowsmale_copy[$d]++;
			if ($cowsmale_copy[$d] == 5)    //到第四年就死了
			{
				unset($cowsmale_copy[$d]);
		    }			
			
		}	
         $cowsmale = $cowsmale_copy; 		
	}

	return count($cows) + count($cowsmale); 
}
echo "<br>list  totol--->".cow_norecursion(26);

echo "<br>totol  recursion--->".cowrecursion(26);

//end

以上就介绍了母牛生仔的递归算法和非递归算法。,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
C语言return的用法详解C语言return的用法详解Oct 07, 2023 am 10:58 AM

C语言return的用法有:1、对于返回值类型为void的函数,可以使用return语句来提前结束函数的执行;2、对于返回值类型不为void的函数,return语句的作用是将函数的执行结果返回给调用者;3、提前结束函数的执行,在函数内部,我们可以使用return语句来提前结束函数的执行,即使函数并没有返回值。

Java中return和finally语句的执行顺序是怎样的?Java中return和finally语句的执行顺序是怎样的?Apr 25, 2023 pm 07:55 PM

源码:publicclassReturnFinallyDemo{publicstaticvoidmain(String[]args){System.out.println(case1());}publicstaticintcase1(){intx;try{x=1;returnx;}finally{x=3;}}}#输出上述代码的输出可以简单地得出结论:return在finally之前执行,我们来看下字节码层面上发生了什么事情。下面截取case1方法的部分字节码,并且对照源码,将每个指令的含义注释在

Vue3怎么使用setup语法糖拒绝写returnVue3怎么使用setup语法糖拒绝写returnMay 12, 2023 pm 06:34 PM

Vue3.2setup语法糖是在单文件组件(SFC)中使用组合式API的编译时语法糖解决Vue3.0中setup需要繁琐将声明的变量、函数以及import引入的内容通过return向外暴露,才能在使用的问题1.在使用中无需return声明的变量、函数以及import引入的内容,即可在使用语法糖//import引入的内容import{getToday}from&#39;./utils&#39;//变量constmsg=&#39;Hello!&#39;//函数func

详解JavaScript函数返回值和return语句详解JavaScript函数返回值和return语句Aug 04, 2022 am 09:46 AM

JavaScript 函数提供两个接口实现与外界的交互,其中参数作为入口,接收外界信息;返回值作为出口,把运算结果反馈给外界。下面本篇文章带大家了解一下JavaScript函数返回值,浅析下return语句的用法,希望对大家有所帮助!

使用JavaScript中return关键字使用JavaScript中return关键字Feb 18, 2024 pm 12:45 PM

JavaScript中return的用法,需要具体代码示例在JavaScript中,return语句用于指定从函数中返回的值。它不仅可以用于结束函数的执行,还可以将一个值返回给调用函数的地方。return语句有以下几个常见的用法:返回一个值return语句可以用来返回一个值给调用函数的地方。下面是一个简单的示例:functionadd(a,b){

Python返回值return怎么用Python返回值return怎么用Oct 07, 2023 am 11:10 AM

Python返回值return用法是当函数执行到return语句时,将立即停止执行,并将指定的值返回给调用函数的地方。详细用法:1、返回单个值;2、返回多个值;3、返回空值;4、提前结束函数的执行。

JavaScript中如何使用return语句JavaScript中如何使用return语句Feb 26, 2024 am 09:21 AM

JavaScript中return的使用方法,需要具体代码示例在JavaScript中,return是一个非常重要的关键字,它通常用于函数中返回值或结束函数的执行。return语句用于将值返回给函数的调用者,并终止函数的执行。return语句可以在函数的任何位置使用,并且可以返回任何JavaScript数据类型,包括数字、字符串、布尔值、

在Java中,一个方法中的return语句执行后,finally块会被执行吗?在Java中,一个方法中的return语句执行后,finally块会被执行吗?Sep 17, 2023 pm 03:05 PM

是的,即使在方法中的return语句之后,finally块也会被执行。Java中无论是否发生异常,finally块都会执行。如果我们在finally块中显式调用System.exit()方法,那么只有它不会被执行。很少有情况不会执行finally,例如JVM崩溃、电源故障、软件崩溃等。除了这些情况外,finally块将始终被执行。示例publicclassFinallyBlockAfterReturnTest{&nbsp;&nbsp;publicstaticvoidmain(St

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

mPDF

mPDF

mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

Dreamweaver Mac版

Dreamweaver Mac版

视觉化网页开发工具

EditPlus 中文破解版

EditPlus 中文破解版

体积小,语法高亮,不支持代码提示功能

安全考试浏览器

安全考试浏览器

Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。