鱼C论坛

 找回密码
 立即注册
查看: 2267|回复: 9

[已解决]关于Fibonacci数列迭代法实现的问题

[复制链接]
发表于 2021-5-6 11:24:39 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 世界第一大栗旬 于 2021-5-6 16:33 编辑

7(JN7}5UWJ0SZ1QGK](N~5D.png

根据这段代码里的以下部分:

if n < 1:
        print('输入有误')
        return -1

即:如果输入的参数小于1,将返回-1。
而后续的【return c】是一条并列的指令,应该是不需要条件、必定会执行的,那么返回值 -1 为什么不会被 c 覆盖呢

(已经运行过,当输入的n < 1时,返回值的确是-1)

最佳答案
2021-5-6 13:57:08
再举个简单的栗子,这里难道说完x是0之后还要说不是0嘛?
return语句之后程序就结束了知道吗
def a(x):
    if x == 0:
        return 'x是0!'
    return 'x不是0!'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-5-6 11:32:53 | 显示全部楼层
来个全代码看下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-5-6 11:38:07 | 显示全部楼层

诶,原帖中的截图不能正常显示吗,图中是完整的一段代码

文本版如下:

def fib(n):
    a = 1
    b = 1
    c = 1

    if n < 1:
        print('输入有误')
        return -1

    while (n-2) > 0:
        c = a + b
        a = b
        b = c
        n -= 1

    return c

result = fib(20)

if result != -1:
    print('总共有%d只兔子' % result)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-5-6 12:01:42 | 显示全部楼层
世界第一大栗旬 发表于 2021-5-6 11:38
诶,原帖中的截图不能正常显示吗,图中是完整的一段代码

文本版如下:

return -1之后这段代码就退出不会往下运行了,所以不会执行return c
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2021-5-6 13:25:07 | 显示全部楼层
本帖最后由 柿子饼同学 于 2021-5-6 13:52 编辑
世界第一大栗旬 发表于 2021-5-6 11:38
诶,原帖中的截图不能正常显示吗,图中是完整的一段代码

文本版如下:


它不是有一个条件判断嘛,
if n < 1:
        print('输入有误')
        return -1
这样如果小于1就直接返回-1,这个程序就这样结束了那要是大于等于1那就没她的事了呗
不执行if里的代码了
就执行下面的内容
    while (n-2) > 0:
        c = a + b
        a = b
        b = c
        n -= 1

    return c
所以这两个虽然并列,但是是有条件控制的,只不过没有else罢了
思路就像这样
#                  |--> x大于等于1,返回c
#fib(x)---判断---->|
#                  |--> x小于1,返回-1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2021-5-6 13:57:08 | 显示全部楼层    本楼为最佳答案   
再举个简单的栗子,这里难道说完x是0之后还要说不是0嘛?
return语句之后程序就结束了知道吗
def a(x):
    if x == 0:
        return 'x是0!'
    return 'x不是0!'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-5-6 14:02:14 | 显示全部楼层
柿子饼同学 发表于 2021-5-6 13:25
它不是有一个条件判断嘛,
这样如果小于1就直接返回-1,那要是大于等于1那就没她的事了呗
就不执行if里 ...

按照你的思路,那也是  if else 语句控制,而不是 if while 语句,你增加一个else 就是合法可执行语句。
def fib(n):
    a = 1
    b = 1
    c = 1

    if n < 1:
        print('输入有误')
        return -1

    else:
        while (n-2) > 0:
            c = a+b
            a = b
            b = c
            n -= 1
        return c

result = fib(20)

if result != -1:
    print('总共有%d只兔子' % result)

总共有6765只兔子
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-5-6 15:22:03 | 显示全部楼层
dragon_xiao 发表于 2021-5-6 14:02
按照你的思路,那也是  if else 语句控制,而不是 if while 语句,你增加一个else 就是合法可执行语句。
...

我的意思是,return完之后就结束程序了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-5-6 16:01:15 | 显示全部楼层
柿子饼同学 发表于 2021-5-6 13:25
它不是有一个条件判断嘛,
这样如果小于1就直接返回-1,这个程序就这样结束了那要是大于等于1那就没她的 ...

明白了!谢谢你!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-5-6 16:22:21 | 显示全部楼层

有帮助记得评最佳答案哦
蟹蟹
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-16 00:16

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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