php猴子吃桃子问题n天,『PHP学习笔记』系列四:利用函数递归调用思想解决【斐波那契数列】问题和【猴子吃桃问题】问题...

什么是函数递归思想?

递归思想:把一个相对复杂的问题,转化为一个与原问题相似的,且规模较小的问题来求解。

递归方法只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。

但在带来便捷的同时,也会有一些缺点,函数递归的运行效率不高(多次调用时)。

递归调用是一种特殊的嵌套调用,是某个函数调用自己或者是调用其他函数后再次调用自己的,只要函数之间互相调用能产生循环的则一定是递归调用,递归调用一种解决方案,一种是逻辑思想,将一个大工作分为逐渐减小的小工作,递归是一种思想,只不过在程序中,就是依靠函数嵌套这个特性来实现了。

递归调用的定义:

递归调用就是在当前的函数中调用当前的函数并传给相应的参数,这是一个动作,这一动作是层层进行的,直到满足一般情况的的时候,才停止递归调用,开始从最后一个递归调用返回。

了解斐波那契数列:

斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(3)=2,F(n)=F(n-1)+F(n-2)(n>=4,n∈N*)在现代物理、准晶体结构、化学等领域,斐波纳契数列都有直接的应用。

问题:

有如下一个数列:1,1, 2, 3, 5, 8, 13, 21,....... 其规则是:前两个已知(即1和2),从第3个开始,其值为其左边两个值的和(此数列称为斐波那契数列)。定义一个函数,该函数可以求出该数列的任意第n个数的值。

代码实现:

//利用递归解决斐波那契数列问题

function math($number) {

if ($number == 1 || $number == 2) {

return 1;//递归出口

}

return math($number - 1) + math($number - 2);//递归调用函数

}

echo math(20) . "


";

?>

运行结果:

0890fb79a8e4458f5e3b72520edb6fd0.png

其他递归调用问题:

1,已知,老五比老四小5岁,老四比老三小5岁,老三比老二小5岁,老二比老大小5岁,且老大为40岁。求老五的年龄为?

544455c186da4a045d8194f556204a50.png

代码实现:

//实例:用递归调用求老五的年龄

function recursive($num) {

//递归退出条件

if ($num == 1) {

return 40;

} else {

//递归调用

return recursive($num - 1) - 5;

}

}

echo "老五的年龄为:";

echo recursive(5);

echo "


";

?>

运行结果:

adaafde2b55046b000d270400b11499d.png

2,猴子吃桃问题:

有一群猴子,去摘了一堆桃子,商量之后决定每天吃剩余桃子的一半,当每天大家吃完桃子之后,有个贪心的小猴都会偷偷再吃一个桃子,按照这样的方式猴子们每天都快乐的吃着桃子;直到第十天,当大家再想吃桃子时,发现只剩下一个桃子了。问:猴子们一共摘了多少桃子?【经典面试题】

问题分析:

按照题意,猴子们每天吃桃子的一半,小猴子再偷吃一个,等于每天都吃前一天剩余桃子的一半加一个,知道第十天只剩一个桃子。

abcd19f078b4fc0930facb9d3002b279.png

代码实现:

//实例:猴子吃桃

function numbers($numbers) {

//递归退出条件

if ($numbers == 10) {

return 1;

} else {

//递归调用

return (numbers($numbers + 1) + 1) * 2;

}

}

echo "总共摘的桃子为:";

echo numbers(1);

echo "


";

?>

运行结果:

876f0e24999585a7554e7440037d6588.png

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
问题描述】 【问题描述】编写函数f,功能是用递归的方法求斐波那契数列的第n项,函数原型为 int f(int n),在主函数输入一个正整数n,调用函数f求出斐波那契数列的第n项,并在主函数中输出。 斐波那契数列:1,1,2,3,5,8,13,21…… 【输入形式】3 【输出形式】2 【样例输入】6 【样例输出】8 【问题描述】编写函数f,功能是用递归的方法求斐波那契数列的第n项,函数原型为 int f(int n),在主函数输入一个正整数n,调用函数f求出斐波那契数列的第n项,并在主函数中输出。 斐波那契数列:1,1,2,3,5,8,13,21…… 【输入形式】3 【输出形式】2 【样例输入】6 【样例输出】8 【问题描述】编写函数f,功能是用递归的方法求斐波那契数列的第n项,函数原型为 int f(int n),在主函数输入一个正整数n,调用函数f求出斐波那契数列的第n项,并在主函数中输出。 斐波那契数列:1,1,2,3,5,8,13,21…… 【输入形式】3 【输出形式】2 【样例输入】6 【样例输出】8 【问题描述】编写函数f,功能是用递归的方法求斐波那契数列的第n项,函数原型为 int f(int n),在主函数输入一个正整数n,调用函数f求出斐波那契数列的第n项,并在主函数中输出。 斐波那契数列:1,1,2,3,5,8,13,21…… 【输入形式】3 【输出形式】2 【样例输入】6 【样例输出】8 斐波那契数列:1,1,2,3,5,8,13,21…… 【输入形式】3 【输出形式】2 【样例输入】6 【样例输出】8

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值