#该程序由023递归这课中的fibonacci数列递归写法修改而成
#在写的过程中发现,如果要正确引导用户的每一次输入,写的代码比主程序还要多
#当然,为了使程序在用户交互过程中显得更加友好,提供错误提示也是一个好习惯
#
#由fibonacci螺旋递归写法引申出的字串符格式化和内置方法的探索 level = input('请输入Fibonacci螺旋层数:') #判断输入字符是否为大于0的整数,.isdigit()方法是判断字串符是否为整数
#当然非数字或者是小数点都不在整数范围
#在shell测试了一下发现负整数也不能用.isdigit()方法
while not level.isdigit() or int(level) == 0:
level = input('输入错误,请重新输入大于0的正整数):')
#注意,我在这里用了float使输入的数字变为浮点数
#以我现在的知识,如果这里不用float转化,
#那么接下来的函数里 fab(level-1) + fab(level-2)会变为字串符的拼接。原因目前未明。
print('注意:两个数字不能同时为0!')
FirstNum = float(input('第一个数字'))
SecondNum = float(input('第二个数字')) #判断两个数字是否同时为0,注意,用and这个操作符
while FirstNum == 0 and SecondNum == 0:
print('注意:两个数字不能同时为0!')
FirstNum = float(input('第一个数字'))
SecondNum = float(input('第二个数字')) #循环打印输出,如果不加for语句,那么只输出最后那个结果
#如果for level in里的level换成其他,那么
for level in range(1,int(level)+1):
#以下是递归主程序
def fab(level):
#初始最开始两个数字的值
if level == 1:
global FirstNum
return FirstNum
elif level == 2:
global SecondNum
return SecondNum
#如果没有上面那两个if判断,那么程序将进入死循环,原因是不是因为递归没给初始值呢?
else:
return (fab(level-1) + fab(level-2)) result = fab(level)
#%.2f把浮点数格式化为带两个小数点输出
print('%.2f' % result, end = ' ')

测试:

请输入Fibonacci螺旋层数:abc
输入错误,请重新输入大于0的正整数):-5
输入错误,请重新输入大于0的正整数):0
输入错误,请重新输入大于0的正整数):8
注意:两个数字不能同时为0!
第一个数字-2.9
第二个数字3.15
-2.90 3.15 0.25 3.40 3.65 7.05 10.70 17.75

拓展,Fibonacci螺旋的更多相关文章

  1. [zoj 3774]Power of Fibonacci 数论(二次剩余 拓展欧几里得 等比数列求和)

    Power of Fibonacci Time Limit: 5 Seconds      Memory Limit: 65536 KB In mathematics, Fibonacci numbe ...

  2. 算法——js(Fibonacci数列)

    斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家列昂纳多·斐波那契(Leonardoda Fibonacci[1]  )以兔子繁殖为例子而引入,故又称为“兔子数列”,指 ...

  3. hdu3306 Another kind of Fibonacci【矩阵快速幂】

    转载请注明出处:http://www.cnblogs.com/KirisameMarisa/p/4187670.html 题目链接:http://acm.hdu.edu.cn/showproblem. ...

  4. 打印Fibonacci数列方法汇总(前20项,每行5个)

    NO.1 迭代法 标签:通俗.易懂 思路:先打印第一项.再在循环里面执行fib=fib1+fib2,把fib2赋给fib1,把fib赋给fib2,每行5个可使用if函数(循环次数对5取余). #inc ...

  5. es6入门3--箭头函数与形参等属性的拓展

    对函数拓展兴趣更大一点,优先看,前面字符串后面再说,那些API居多,会使用能记住部分就好. 一.函数参数可以使用默认值 1.默认值生效条件 在变量的解构赋值就提到了,函数参数可以使用默认值了.正常我们 ...

  6. python拓展1 week1-week5复习回顾

    知识内容: 1.python基础概念及基础语法 2.python基础数据类型 3.python模块相关 4.python函数相关 5.python面向对象相关 6.python文件处理相关 注:本节内 ...

  7. 欧几里得 & 拓展欧几里得算法 解说 (Euclid & Extend- Euclid Algorithm)

    欧几里得& 拓展欧几里得(Euclid & Extend-Euclid) 欧几里得算法(Euclid) 背景: 欧几里德算法又称辗转相除法.用于计算两个正整数a.b的最大公约数. -- ...

  8. C++对C的函数拓展

    一,内联函数 1.内联函数的概念 C++中的const常量可以用来代替宏常数的定义,例如:用const int a = 10来替换# define a 10.那么C++中是否有什么解决方案来替代宏代码 ...

  9. 算法与数据结构(九) 查找表的顺序查找、折半查找、插值查找以及Fibonacci查找

    今天这篇博客就聊聊几种常见的查找算法,当然本篇博客只是涉及了部分查找算法,接下来的几篇博客中都将会介绍关于查找的相关内容.本篇博客主要介绍查找表的顺序查找.折半查找.插值查找以及Fibonacci查找 ...

随机推荐

  1. iOS 开发常用宏

    来源:iOS_小松哥 链接:http://www.jianshu.com/p/be00c3f3cafd 大家都是知道使用宏不仅方便,而且可以提高开发效率.下面总结了iOS开发过程中的一些常用宏,会持续 ...

  2. 查看Oracle执行计划的几种方法

    查看Oracle执行计划的几种方法 一.通过PL/SQL Dev工具 1.直接File->New->Explain Plan Window,在窗口中执行sql可以查看计划结果.其中,Cos ...

  3. discuze回放提示“抱歉,您的请求来路不正确或表单验证串不符,无法提交”

    不知从哪里看到文章,但是实用: 背景:discuze就单纯的录制一个注册脚本,日志中没有报错,在报告中就提示"抱歉,您的请求来路不正确或表单验证串不符,无法提交"",以下 ...

  4. UML——综合实例

  5. 如何同时启动多个Tomcat服务器

    1.使用压缩版的tomcat不能使用安装版的. 2.第一个tomcat的配置不变. 3.增加环境变量CATALINA_HOME2,值为新的tomcat的地址:增加环境变量CATALINA_BASE2, ...

  6. 制作BibTex文件

    上一篇日志中讲到了在LaTeX中使用BibTex管理参考文献,这篇日志具体总结下如何制作BibTex文件. 制作BibTex文件,主要有以下几种方法: 手工制作: 直接从期刊数据库中下载: 借助Goo ...

  7. Cocos2d-x开发实例:使用Lambda 表达式

    在Cocos2d-x 3.0之后提供了对C++11标准[1]的支持,其中的Lambda[2]表达式使用起来非常简洁.我们可以使用Lambda表达式重构上一节的实例. 我们可以将下面的代码: liste ...

  8. iOS开发——锁屏监听

    公司所做的项目,锁屏监听是为了60秒后,解锁瓶后显示[手势解锁]或[指纹验证]: 第一步:AppDelegate.m 头部导入 #import <notify.h> #define Not ...

  9. 自定义DZLMoneyLabel

    一.简介 由于父亲生病,好久没有更新博客了,今天10.1 国庆(应该说是昨天了,已经过了12点了),心血来潮自定义了一个小label.这个控件的难度并不大,也没有什么可以值得炫耀的技术点.写这个控件的 ...

  10. Polyline转Polygon

    IGeometry geo = feature.ShapeCopy; IGeometryCollection pPolyline = geo as IGeometryCollection; ISegm ...