zoukankan      html  css  js  c++  java
  • 循环和递归求阶乘、递归实现汉诺塔程序、递归实现拆出每个位的数字放在列表中、递归求第五个人的年龄

    递归就是自己调用自己

    递归必须满足哪两个基本条件? 1、函数调用自身 2、设置了正确的返回条件

    思考一下,按照递归的特性,在编程中有没有不得不使用递归的情况?
    例如汉诺塔、目录索引(因为你永远不知道这个目录里边是否还有目录)、快速排序(二十世纪十大算法之一)、树结构的定义等如果使用递归,会事半功倍,否则会导致程序无法实现或相当难以理解

     

    1、用循环求阶乘

    def factorial(n):
    result = n
    for i in range(1, n):
    result *= i
    return result

    number = int(input('请输入一个正整数:').strip())
    res = factorial(number)
    print('%d的阶乘是%d' % (number, res))

    2、用递归就阶乘

    def factorial(n):
    if n < 1:
    print('输入错误,请重新输入!')
    elif n == 1:
    return 1
    else:
    return n * factorial(n - 1)
    num = int(input('请输入一个正整数:').strip())
    print('%d的阶乘是%d' % (num,factorial(num)))

    递归实现汉诺塔

    def hanoi(n, x, y, z):  # 共有n个盘子,从x挪到z上,一次只能挪动一个盘子,小盘子必须在大盘子的上面
    if n == 1:
    print(x, '->', z)
    else:
    hanoi(n - 1, x, z, y) # 将前n - 1个盘子从x移动到y上
    print(x, '->', z) # 将最底下的最后一个盘子从x移动到z上
    hanoi(n - 1, y, x, z) # 将y上的n - 1个盘子移动到z上


    res = int(input('请输入汉诺塔的层数:').strip())
    hanoi(res, 'X', 'Y', 'Z')

    递归实现函数get_digits(n),将参数n分解出每个位的数字并按顺序放在列表中,举例:get_digits(12345)==>[1, 2, 3, 4, 5]

    result = []


    def get_digits(n):
    if n > 0:
    result.insert(0, n % 10)
    get_digits(n // 10)


    get_digits(678912324)
    # get_digits(564)
    result.sort()
    print(result)

    递归求第五个人的年龄:
    有5个人坐在一起,问第五个人多少岁?他说比第四个人大2岁。问第四个人岁数,他说比第三个人大2岁。问第三个人,又说比第二个人大两岁。问第二个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?

    def age(n):
    if n == 1:
    return 10
    else:
    return age(n - 1) + 2


    print('哈哈,我知道了,第五个人的年龄是%d' % age(5))
  • 相关阅读:
    WorkerMan中php后端及时推送消息给客户端
    解析Laravel框架下的Contracts契约
    如何在 Laravel 中使用 Slack 进行异常通知
    用户异常与模拟异常的派发
    [IDA] 将变量索引进行计算
    [反汇编]栈帧中函数的参数传入位置
    用户模拟异常的记录
    [反汇编]函数开始部分利用mov ebx,esp找到返回地址(_KTRAP_FRAME结构)
    [反汇编] 获取上一个栈帧的ebp
    CPU异常分析(以trap00为例)
  • 原文地址:https://www.cnblogs.com/laosun0204/p/8794301.html
Copyright © 2011-2022 走看看