世界第一大栗旬 发表于 2021-5-6 11:24:39

关于Fibonacci数列迭代法实现的问题

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



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

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

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

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

dragon_xiao 发表于 2021-5-6 11:32:53

来个全代码看下

世界第一大栗旬 发表于 2021-5-6 11:38:07

dragon_xiao 发表于 2021-5-6 11:32
来个全代码看下

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

文本版如下:

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)

王逗比666 发表于 2021-5-6 12:01:42

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

文本版如下:


return -1之后这段代码就退出不会往下运行了,所以不会执行return c

柿子饼同学 发表于 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{:9_227:}

柿子饼同学 发表于 2021-5-6 13:57:08

再举个简单的栗子,这里难道说完x是0之后还要说不是0嘛?
return语句之后程序就结束了知道吗
def a(x):
    if x == 0:
      return 'x是0!'
    return 'x不是0!'

dragon_xiao 发表于 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只兔子

柿子饼同学 发表于 2021-5-6 15:22:03

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

我的意思是,return完之后就结束程序了{:10_245:}

世界第一大栗旬 发表于 2021-5-6 16:01:15

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

明白了!谢谢你!

柿子饼同学 发表于 2021-5-6 16:22:21

世界第一大栗旬 发表于 2021-5-6 16:01
明白了!谢谢你!

有帮助记得评最佳答案哦
蟹蟹
页: [1]
查看完整版本: 关于Fibonacci数列迭代法实现的问题