鱼C论坛

 找回密码
 立即注册
查看: 1011|回复: 7

初学者关于小兔子生兔子问题

[复制链接]
发表于 2019-5-12 15:25:46 | 显示全部楼层 |阅读模式

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

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

x
原始程序---------------- 问题在下面
def fah(n):
    n1 = 1
    n2 = 1
    n3 = 1
    if n < 1:
        print ("mistake")
        return -1
    while (n -2) > 0:
        n3 = n2 + n1
        n1 = n2
        n2 = n3
        n -= 1
        
    return n3


result = fah(20)
if result != -1:
    print ("totally there will be rabit!")
    print (result)

-----------------------------------------------------------------------------------------------------------------------------------------------

问题求助

兔子生崽题如果用迭代的方法

问题一
n1 n2 n3 和 n 计算机会不会认为是四个不的变量,在while循环里面,n1,n2,n3,三个变量联系在了了一起,但是计算机怎么知道他们都是n的特定形式 ?

问题二
如果 n = 20的话,
计算机迭代式先从
n20 = n19+n18
然后
n18 代替 n19
n19 代替 n20


n19 = n18 + n??

是这样吗

n?? (应该是n17) 这个怎么来的? 是从n = n-1来的?

如果是,那么
下面的 n = n-1已经规定了n你的迭代方式为什么还要写
n1 = n2
n2 = n3
呢?


问题三
还有
n1 = n2
n2 = n3

里面的1 2 3 数字是否有升序的含义 还是仅仅区别变量的作用?
如果是表示升序
下一轮的n1 替代这一轮的 n2,
下一轮n2 替代这一轮的 n3
不是数字在逐渐升高吗
为什么是
n -= 1



问题四
原始程序是自变量n在迭代
为什么不是方程result的迭代呢?毕竟第20月的兔子数量等于第19月和第18月兔子数量的和应该是方程返回量在迭代啊?
我试图这样写引入了一个变量i


def F(n):

F(1)=1
F(2)=1

for (i +3) < = n
i=0
F(i+3)=F(i+1)+F(i+2)
F(i+1)=F(i+2)
F(i+2)=F(i+3)
return F(i+3)

程序是运行不了的
似乎递归也就是直接方程在迭代 但为什么上面迭代方式运行不了呢?




问题一箩筐,谢谢指教啊
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-5-13 05:55:01 From FishC Mobile | 显示全部楼层
原题是啥,是不是就是FIB数列
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-5-13 06:29:35 | 显示全部楼层
wp231957 发表于 2019-5-13 05:55
原题是啥,是不是就是FIB数列

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

使用道具 举报

发表于 2019-5-13 06:46:24 | 显示全部楼层
  1. def fib(n):
  2.   if n==0 or n==1:return 1
  3.   a=b=1
  4.   f=0
  5.   for x in range(n-1):
  6.     f=a+b
  7.     a=b
  8.     b=f
  9.   return f   
  10.   
  11. def PrintFN(m,n):
  12.   total=0
  13.   idx=1
  14.   while fib(idx)<=n:
  15.     if fib(idx)>=m:total+=1
  16.     idx+=1
  17.   return total


  18. #调用
  19. print(fib(6))  
  20. print(PrintFN(20,100))  
复制代码


昨天给别人写的函数  第一个是返回第N个fib数列的数
第二个是返回某两个区间的fib的个数
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-5-14 14:29:22 From FishC Mobile | 显示全部楼层
不明觉厉, 还是谢谢!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-14 15:17:48 | 显示全部楼层
本帖最后由 万中山 于 2019-5-14 15:19 编辑
  1. def fib(n):
  2.     a , b = 0,1
  3.     while b<n:
  4.         yield b
  5.         a,b = b,a+b
  6. if __name__ == '__main__':
  7.     for i in fib(20):
  8.         print(i,end=' ')
复制代码



执行结果:1 1 2 3 5 8 13
不知道是不是你想要的。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-5-14 23:37:11 From FishC Mobile | 显示全部楼层
万中山 发表于 2019-5-14 15:17
执行结果:1 1 2 3 5 8 13
不知道是不是你想要的。

等我再学习研究一下 谢谢了先!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-15 16:35:15 | 显示全部楼层
好巧,我也刚看到这个视频,给你看下我的理解
#n=3        当n值为3时,进入循环
#3-2>0      循环成立
#n3=1+1     执行循环体      
#n1=1       执行循环体
#n2=2       执行循环体
#n-=1       执行循环体,把n的值减1后再次进入循环
#n=2        n值减去1后的新值,用新值再次开启循环
   
#2-2>0      不成立,退出循环,返回上一次n3的值,即n3=1+1)
#当n值为3时,最终返回的n3值为2
#############################################################



#n=4        当n值为4时,进入循环
#4-2>0      循环成立
#n3=1+1     执行循环体      
#n1=1       执行循环体
#n2=2       执行循环体
#n-=1       执行循环体,把n的值减1后再次进入循环
#n=3        n值减去1后的新值,用新值再次开启循环
   
#3-2>0      循环成立
#n3=2+1     执行循环体      
#n1=2       执行循环体
#n2=3       执行循环体
#n-=1       执行循环体,把n的值减1后再次进入循环
#n=2        n值减去1后的新值,用新值再次开启循环
#2-2>0      不成立,退出循环,返回上一次n3的值,即n3=2+1)
#当n值为4时,最终返回的n3值为3
##############################################################
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-15 18:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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