贝壳头 发表于 2021-11-25 14:34:35

递归实现斐波那契

本帖最后由 贝壳头 于 2021-11-25 16:07 编辑

为什么 在 I=6
fun a-1 + func a-2 返回值却是8?
它们内部怎么计算的?为什么和是8
参数a-1 等于5、参数a-2等于4么?

<?php
//利用递归实现前10个斐波那契数列
//分析:1 1 2 3 5 8 13 21 34 55 为前十个斐波那契数列
//第一个数 为1 第二个数为 1 第三个数 前两个数相加之和
function fun($a)
{
   if ($a==1||$a==2)//如果是第一个数或者是第二个数那么就输出1。
   {
         return 1 ;
   }
   return fun($a-1)+fun($a-2);//如果不是第一个数或者第二个数那么就输出前两个数之和。
}
for($i=1;$i<=10;$i++)。i   等于 6
{
echo fun($i).'&nbsp;';
}
?>

jackz007 发表于 2021-11-25 15:02:27

      你根据什么说 I = 6 时,返回 8 不对?

贝壳头 发表于 2021-11-25 15:53:29

jackz007 发表于 2021-11-25 15:02
你根据什么说 I = 6 时,返回 8 不对?

10以内的斐波那契数列啊、
当执行到第六次的时候 i不就等于6了么?
传递的实参

jackz007 发表于 2021-11-25 15:57:23

贝壳头 发表于 2021-11-25 15:53
10以内的斐波那契数列啊、
当执行到第六次的时候 i不就等于6了么?
传递的实参

      你自己都列出来了斐波那契数列的前 10 项: 1 1 2 3 5 8 13 21 34 55,第 6 项分明就是 8 啊。
      

贝壳头 发表于 2021-11-25 15:58:54

jackz007 发表于 2021-11-25 15:57
你自己都列出来了斐波那契数列的前 10 项: 1 1 2 3 5 8 13 21 34 55,第 6 项分明就是 8 啊。
...

这是前两个数的和啊、我想知道它们的和为什么是8,内部是怎么计算的

jackz007 发表于 2021-11-25 16:14:27

贝壳头 发表于 2021-11-25 15:58
这是前两个数的和啊、我想知道它们的和为什么是8,内部是怎么计算的

   递推懂不懂?
   1 , 1->1 + 1 = 2    由 1、2 项生出第 3 项
   1 , 2->1 + 2 = 3    由 2、3 项生出第 4 项
   2 , 3->2 + 3 = 5    由 3、4 项生出第 5 项
   3 , 5->3 + 5 = 8    由 4、5 项生出第 6 项   

贝壳头 发表于 2021-11-25 16:31:33

jackz007 发表于 2021-11-25 16:14
递推懂不懂?
   1 , 1->1 + 1 = 2    由 1、2 项生出第 3 项
   1 , 2->1 + 2 = 3 ...

第一次接触、理解能力比较差,6-1等于五、6-2等于4不应该是这样的吗

jackz007 发表于 2021-11-25 16:33:17

贝壳头 发表于 2021-11-25 16:31
第一次接触、理解能力比较差,6-1等于五、6-2等于4不应该是这样的吗

       怎么又出来减法了?从 1、1 开始,向后做加法。

贝壳头 发表于 2021-11-25 16:34:37

jackz007 发表于 2021-11-25 16:33
怎么又出来减法了?从 1、1 开始,向后做加法。

是从最底层返回每次加一吗?

jackz007 发表于 2021-11-25 17:05:40

本帖最后由 jackz007 于 2021-11-25 17:11 编辑

       不是加1,是前两项相加得到后一项。6 楼写的那么清楚,居然看不懂???
页: [1]
查看完整版本: 递归实现斐波那契