鱼C论坛

 找回密码
 立即注册
查看: 557|回复: 15

[已解决]函数

[复制链接]
发表于 2018-7-31 16:01:29 | 显示全部楼层 |阅读模式

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

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

x
def F(n):
    if n==1:
        return F(n)==1
    elif n==2:
        return F(n)==2
    elif n>2:
        return F(n)==F(n-1)+F(n-2)
number=int(input('请输入一个正整数:'))
result=F(n)
print('结果是:',result)
请问我这段代码要怎么改呢?报错说n没有定义
最佳答案
2018-7-31 16:07:51
def fab(n):
    if n <1:
        print('error! Must be positive')
        return -1

    if n ==1 or n ==2:
        return 1
    else:
        return fab(n-1) + fab(n-2)

你要做的应该是这个吧?那个 n 因为是在函数里面调用的,所以在函数内部是没有被定义的
def F(n): 内部并没有 n = 1 或其他的东西

如果说简单地改,那么应该是 n = int(input(...))
return 'F(n) == 1' ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-7-31 16:07:51 | 显示全部楼层    本楼为最佳答案   
def fab(n):
    if n <1:
        print('error! Must be positive')
        return -1

    if n ==1 or n ==2:
        return 1
    else:
        return fab(n-1) + fab(n-2)

你要做的应该是这个吧?那个 n 因为是在函数里面调用的,所以在函数内部是没有被定义的
def F(n): 内部并没有 n = 1 或其他的东西

如果说简单地改,那么应该是 n = int(input(...))
return 'F(n) == 1' ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-31 16:09:34 | 显示全部楼层

  1. def F(n):
  2.     if n==1:
  3.         return F(n)==1
  4.     elif n==2:
  5.         return F(n)==2
  6.     elif n>2:
  7.         return F(n)==F(n-1)+F(n-2)
  8. number=int(input('请输入一个正整数:'))
  9. result=F(number)#n是形参,number才是实参。
  10. print('结果是:',result)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-7-31 16:52:54 | 显示全部楼层
claws0n 发表于 2018-7-31 16:07
def fab(n):
    if n

你好,我这么改了之后又说超过规定的递归层数:
def F(n):
    if n==1:
        return F(n)==1
    elif n==2:
        return F(n)==2
    elif n>2:
        return F(n)==F(n-1)+F(n-2)
n=int(input('请输入一个正整数:'))
result=F(n)
print('结果是:',result)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-7-31 17:01:27 | 显示全部楼层

这个也报错,会显示:Traceback (most recent call last):
  File "C:/Users/admin/Desktop/sda.py", line 9, in <module>
    result=F(number)
  File "C:/Users/admin/Desktop/sda.py", line 7, in F
    return F(n)==F(n-1)+F(n-2)
  File "C:/Users/admin/Desktop/sda.py", line 7, in F
    return F(n)==F(n-1)+F(n-2)
  File "C:/Users/admin/Desktop/sda.py", line 7, in F
    return F(n)==F(n-1)+F(n-2)
  [Previous line repeated 989 more times]
  File "C:/Users/admin/Desktop/sda.py", line 2, in F
    if n==1:
RecursionError: maximum recursion depth exceeded in comparison
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-31 17:03:24 | 显示全部楼层
半岛日志 发表于 2018-7-31 17:01
这个也报错,会显示:Traceback (most recent call last):
  File "C:/Users/admin/Desktop/sda.py", li ...

你这个都成了无限递归了嘛……函数本体有问题。(怪不得我看的怪怪的)
  1. def F(n):
  2.     if n==1:
  3.         return 1
  4.     elif n==2:
  5.         return 2
  6.     elif n>2:
  7.         return F(n-1)+F(n-2)
  8. number=int(input('请输入一个正整数:'))
  9. result=F(number)#n是形参,number才是实参。
  10. print('结果是:',result)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-7-31 17:39:01 | 显示全部楼层
无符号整形 发表于 2018-7-31 17:03
你这个都成了无限递归了嘛……函数本体有问题。(怪不得我看的怪怪的)

那应该怎么改呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-31 17:41:09 | 显示全部楼层
半岛日志 发表于 2018-7-31 17:01
这个也报错,会显示:Traceback (most recent call last):
  File "C:/Users/admin/Desktop/sda.py", li ...

都说了,你的代码有问题,应该是我一开始就给你的代码,或是版主(无符号整形)。我给的有简单的安全保护,确保输入是要大于1,但没有对小数做保护。

你的 return 一直在做比较 F(n) == F(n-1) + F(n-2),不是这样的,如果你是要打印出来一个字串,就加引号,不然就是参考我们给的代码~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-31 17:41:20 | 显示全部楼层

。。。我不是给出来了吗……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-31 17:47:06 | 显示全部楼层

不断返回比较干毛线啊……那个不是1就是0,当然会无限递归了。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-31 18:33:47 | 显示全部楼层
无符号整形 发表于 2018-7-31 17:47
不断返回比较干毛线啊……那个不是1就是0,当然会无限递归了。。

楼上正解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-7-31 19:28:14 | 显示全部楼层
无符号整形 发表于 2018-7-31 17:47
不断返回比较干毛线啊……那个不是1就是0,当然会无限递归了。。

很不好意思,我真的不太明白我的为什么会进入无限递归,而另一位给的代码就正常呢?麻烦你再给我解释的详细一些,我是初学者,请多包涵
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-31 19:31:35 | 显示全部楼层
半岛日志 发表于 2018-7-31 19:28
很不好意思,我真的不太明白我的为什么会进入无限递归,而另一位给的代码就正常呢?麻烦你再给我解释的详 ...

因为
  1. elif n>2:
  2.         return F(n)==
复制代码
这里不断地调用了F(n),在被调用的F(n)里面因为n > 2,所以又这样调用下去。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-7-31 20:01:19 | 显示全部楼层
无符号整形 发表于 2018-7-31 19:31
因为这里不断地调用了F(n),在被调用的F(n)里面因为n > 2,所以又这样调用下去。

那请问他写的:def fab(n):
    if n <1:
        print('error! Must be positive')
        return -1
    if n ==1 or n ==2:
        return 1
    else:
        return fab(n-1) + fab(n-2)
number=int(input('请输入一个正整数:'))
result=fab(number)
print('结果是:',result)
这个怎么改就能让输错的时候有重新输入的机会
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-31 20:03:22 | 显示全部楼层
半岛日志 发表于 2018-7-31 20:01
那请问他写的:def fab(n):
    if n
  1. def fab(n):
  2.     if n <1:
  3.         print('error! Must be positive')
  4.         return -1
  5.     if n ==1 or n ==2:
  6.         return 1
  7.     else:
  8.         return fab(n-1) + fab(n-2)
  9. while True:
  10.     number=int(input('请输入一个正整数:'))
  11.     result=fab(number)
  12.     if result == -1:
  13.         continue
  14.     print('结果是:',result)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-7-31 20:38:56 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-12 02:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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