QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2602|回复: 0
打印 上一主题 下一主题

Python编程----递归求解兔子的数量

[复制链接]
字体大小: 正常 放大

1192

主题

4

听众

2946

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-4-27 15:41 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
描述
' p& _7 X# h. @5 F. z7 ~% I兔子的数量以这样的方式增长:每个月的兔子数量等于它前一个月的兔子数量加它前两个月的兔子数量,即f(n)=f(n-1)+f(n-2)。假设第1个月的兔子有2只,第2个月的兔子有3只,你能使用递归的方法求得第n个月的兔子有多少只吗?3 W6 b' T/ y/ m6 r
; P4 l/ G! J9 r! a  l7 t2 @
输入描述:8 ]9 _9 \! c( i* t. U) c
输入正整数n,n<10。
5 X0 F- r+ S1 K; \6 y6 N: [7 N* M/ I- m; x2 ?
输出描述:; w, c/ @! U1 L6 c3 g4 T
输出第n个月的兔子数量。. k$ s! U* c# t5 M" p2 }
! V/ H. U+ R2 x. y
示例1, x- M0 {  H7 f5 X% p
输入:
! K0 |  G. V. A
) \( V5 L9 [% H. |  p39 a1 \: K8 f( O4 a+ [$ h3 B
复制输出:
# x+ }) d$ W# ^* l8 J1 ?$ h9 h: Z" s6 b. a. A2 M1 Y( P& O' M7 N# S
5
) J1 g+ N& `) }, m复制说明:$ W. @8 s$ t2 Y; R' |

! g9 r' [  J$ Y) |第一个月2只+第二个月3只=第三个月5只
2 R7 V# u0 {  D  n具体代码实现:% I; a9 t  \: K; X7 v0 u
def count(n):# a8 E, l9 z; D, V! Y0 g
    if n==1:
' d, k' A! e8 H8 }, P4 n7 q        return 2. t. f$ Z, S% D6 |  F4 ?! [4 N; ?* w
    elif n==2:# z; X/ |3 m0 [' t; y' Q
        return 3
+ F  i5 U0 ]. k! [/ ^    else:" T& m/ Q' n' C5 k* n
        return count(n-1)+count(n-2)9 V& M6 H0 {9 i2 z& [% e! [' [
i=int(input())
0 V1 h# n% a+ S, U! m! v6 Aif i<10:
9 R# M# v" B3 c3 C7 H    print(count(i))
$ c7 W) Q2 m5 Telse:
% j0 t+ J" U, t# f& Q$ e    print("error")/ N5 H/ w2 ?# X9 w
知识补充:
' z* }. V- X8 H5 a; T4 B什么是递归函数:- O8 @4 D5 s9 j+ z# c5 G. D; b

) W% C% k- T5 S0 D递归函数是指在函数的定义中使用函数自身的函数。
$ q* E# F/ J: m! S
. ]% ?; ~5 @' j* t3 `递归函数通过将一个问题分解成更小的子问题,并在函数内部不断调用自身来解决这些子问题,直到达到基本情况(终止条件)。
: `! l4 x# V% M' J' ~2 j5 z0 F
. I6 Y. V# J' ?# A, E4 s递归函数的特点包括:
; R! g3 p, C  R& {( }5 j: L3 Z$ W% N' m8 Y/ `) d
问题分解:将原问题分解为与自身相似但规模更小的子问题。
5 K/ [! L8 a: R( s自调用:函数在执行过程中会调用自身。+ l9 }8 |& h. [% X9 l
终止条件:存在一个或多个特定条件,当满足这些条件时,递归停止。( f, |8 t4 {) y9 F
解析:
- X8 n$ g+ N+ ?8 U8 M5 B1.思路:由题目可知第一个月和第二个月的兔子的数量是固定的,而从第三个月开始兔子的数量都是前两个月的兔子的数量的总和,这是一个典型的递归函数的例子,自己调用自己,分别调用自己前两次的结果,让他们相加就得到了这一次的结果。
; v3 O% p) }1 L$ b, q: x% j7 A- _8 W! T8 d
2.实现:因此我们需要定义一个函数来返回兔子的数量,根据我们的思路我们可以使用if-elif-else的语句来判断是第几个月,如果是第一个月(if n==1:),则直接返回2;如果是第二个月(elif n==2:),则直接返回3;如果是第三个月或者三个月以上(else),则返回前两次函数的值: return count(n-1)+count(n-2)& B5 Q4 K! h% f0 O

8 K2 w# Q6 Q) f5 O6 q  _3.接收值,判断是否小于10,input函数接收用户的值,if判断小于10,则将其传参给函数,否则输出错误提示。% A# V5 j; V8 H7 U# D
————————————————2 x, ^# q  P/ P3 e- a3 R) c7 U
; p; z, V" R  Y; _
                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。. g# B. f% J) `( s
5 \9 n4 q$ E( R$ w" N
原文链接:https://blog.csdn.net/m0_65237356/article/details/138223099
0 W( }/ z. S( Z2 Z, }# j. l7 [. i; _) R! P

4 e5 Q( J$ V( y9 e9 O: W
zan
转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
您需要登录后才可以回帖 登录 | 注册地址

qq
收缩
  • 电话咨询

  • 04714969085
fastpost

关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

手机版|Archiver| |繁體中文 手机客户端  

蒙公网安备 15010502000194号

Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

GMT+8, 2026-8-25 15:35 , Processed in 0.356276 second(s), 51 queries .

回顶部