鱼C论坛

 找回密码
 立即注册
查看: 1612|回复: 4

[已解决]斐波那契数列 兔子问题

[复制链接]
发表于 2020-9-24 20:19:25 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
小甲鱼课里面的斐波那契数列。这个兔子问题都不太懂,有人解释一下吗
最佳答案
2020-9-24 21:09:39
'''经典斐波拉契问题:
李老师爬楼梯,他每次可以走1级或2级,
输入楼梯的级数,求不同的走法数'''

#f1普通递归
def f1(step: int) -> int:
    if step <= 2:
        return step
    return f1(step - 1) + f1(step - 2)

#f2尾递归法
def f2(step: int, a1: int = 1, a2: int = 2) -> int:
    if step == 1:
        return a1
    if step == 2:
        return a2
    return f2(step - 1, a2, a1 + a2)

#f3标准答案
def f3(step: int, a1: int = 1, a2: int = 2) -> int:
    for x in range(step - 1):
        a1, a2 = a2, a1 + a2
    return a1
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-9-24 20:30:20 | 显示全部楼层
问题发一下,题目代码都不给吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-24 20:32:55 | 显示全部楼层
如果你不了解斐波那契数列本身,建议你去看看李永乐的斐波那契,如果对代码有疑问,请把代码发出来
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-24 20:51:01 | 显示全部楼层
昨非 发表于 2020-9-24 20:30
问题发一下,题目代码都不给吗

我这里有C语言的,程序中要求输入三次出错退出,是我自己写程序时加的,不是题目要求。我不会 Python 语言,你改给他吧

  1. //求斐波那契数列前N项的和

  2. #include<stdio.h>
  3. #include <math.h>
  4. void main()
  5. {
  6.         int i = 1,j = 1,k,n;                           // n 为需要计算的前几项之和
  7.         int f1 = 1 ;
  8.         int f2 = 1 ;
  9.     while(j<4)
  10.         {
  11.                 j++;
  12.                 while(1)
  13.                 {
  14.                         scanf("%d",&n);
  15.                         if(n>0) break;
  16.                         printf("项数不能为负数,请重新输入!\n");
  17.                 }
  18.                 while(1)
  19.                 {
  20.                         if(n>0) break;
  21.                         scanf("%d",&n);
  22.                         if(floor(n) != ceil(n))
  23.                                 printf("项数只能为整数,请重新输入!\n");
  24.                         break;
  25.                 }
  26.                 break;
  27.         }
  28.     if (j==3)
  29.         {
  30.         printf("你输入错误超过三次,请想清楚了再试\n");
  31.         goto loop;                               // 输错三次,无条件退出程序
  32.         }
  33.         if(n % 2 != 0)
  34.         {
  35.                 n = (n - 1) / 2;
  36.                 k = 1;
  37.         }       
  38.         else
  39.            {
  40.                 n = n / 2;
  41.                 k = 0;
  42.            }
  43.         for(;i < n;i++)
  44.         {
  45.                 f1 = f1 + f2 ;                            // 计算出下一个数,并存放于 f1 中
  46.                 f2 = f2 + f1 ;                            // 计算出下两个数,并存放于 f2 中
  47.         }
  48.         if(k == 1)
  49.         {
  50.                 f1 = f1 + f2 ;
  51.                 printf("%d\n",f1);
  52.         }
  53.         else
  54.                 printf("%d\n",f2);
  55. loop :  printf("\n");

  56. }
复制代码

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-24 21:09:39 | 显示全部楼层    本楼为最佳答案   
'''经典斐波拉契问题:
李老师爬楼梯,他每次可以走1级或2级,
输入楼梯的级数,求不同的走法数'''

#f1普通递归
def f1(step: int) -> int:
    if step <= 2:
        return step
    return f1(step - 1) + f1(step - 2)

#f2尾递归法
def f2(step: int, a1: int = 1, a2: int = 2) -> int:
    if step == 1:
        return a1
    if step == 2:
        return a2
    return f2(step - 1, a2, a1 + a2)

#f3标准答案
def f3(step: int, a1: int = 1, a2: int = 2) -> int:
    for x in range(step - 1):
        a1, a2 = a2, a1 + a2
    return a1
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-27 15:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表