zoukankan      html  css  js  c++  java
  • 第023、024讲:递归:这帮小兔崽子、汉诺塔 | 课后测试题及答案

    0. 使用递归编写一个十进制转换为二进制的函数(要求采用“取2取余”的方式,结果与调用bin()一样返回字符串形式)。

      me:

    def gcd(x):
        if x <= 1:
            return str(x)
        else:
            return  gcd(x//2) + str(x%2) 
    print(gcd(12))

      参考答案:

    def Dec2Bin(dec):
        result = ''
        
        if dec:
            result = Dec2Bin(dec//2)
            return result + str(dec%2)
        else:
            return result
    
    print(Dec2Bin(62))

    1. 写一个函数get_digits(n),将参数n分解出每个位的数字并按顺序存放到列表中。举例:get_digits(12345) ==> [1, 2, 3, 4, 5]

      me:

    def get_digits(n):
        if len(n) == 1:
            return [n[len(n)-1]]
        else:
            return  get_digits(n[:len(n)-1]) + [n[len(n)-1]]
    
    n=str(input("请输入一个数字:"))
    print(get_digits(n))

      参考答案:解题思路:利用除以10取余数的方式,每次调用get_digits(n//10),并将余数存放到列表中即可。要注意的是结束条件设置正确。

      

    result = []
    def get_digits(n):
            if n > 0:
                    result.insert(0, n%10)
                    get_digits(n//10)
    
    get_digits(12345)
    print(result)

    2. 还记得求回文字符串那道题吗?现在让你使用递归的方式来求解,亲还能骄傲的说我可以吗?

      me:

    def get_hui(n):
        if len(n) == 1:
            return [True]
        elif len(n) == 2:
            return [n[1] == n[0]]
        else:
            return  get_hui(n[1:len(n)-1]) + [n[len(n)-1] == n[0]]
    
    
    n= str(input("请输入一句话:"))
    if len(n) == 1 :
        print("不是回文联")
    else:
        if False in get_hui(n):
            print("不是回文联")
        else:
            print("是回文联")

      参考答案:有好多种方法,不过综合效率来说,小甲鱼的实现方式比较朴素,利用递归每次索引前后两个字符进行对比,当start > end的时候,也正是首尾下标“碰面”的时候,即作为结束递归的条件。

      

    def is_palindrome(n, start, end):
            if start > end:
                    return 1     
            else:
                    return is_palindrome(n, start+1, end-1) if n[start] == n[end] else 0
            
    string = input('请输入一串字符串:')
    length = len(string)-1
    
    if is_palindrome(string, 0, length):
            print('"%s"是回文字符串!' % string)
    else:
            print('"%s"不是回文字符串!' % string)

    3. 使用递归编程求解以下问题:

    有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?

      me:

    def get_da(n):
        if n == 1:
            return 10 
        else:
            return get_da(n-1) + 2
    
    print(get_da(5))

      参考答案:利用递归的方法,递归分为回推和递推两个阶段。要想知道第五个人岁数,需知道第四人的岁数,依次类推,推到第一人(10岁),再往回推。

    def age(n):
        if n == 1:
            return 10
        else:
            return age(n-1) + 2
            
    print('哈哈,我知道了,第五个人的年龄是 %d 岁,啵啵脆!' % age(5))
  • 相关阅读:
    RHEL6 建立DVD repo
    stl之std::remove_copy
    分鱼问题
    Nutch的日志系统
    log4j配置文件及nutch中的日志配置
    slf4j教程
    Java中的日期操作
    Avro基础
    【JAVA编码专题】总结
    【JAVA编码专题】深入分析 Java 中的中文编码问题
  • 原文地址:https://www.cnblogs.com/kugua7878445/p/12008225.html
Copyright © 2011-2022 走看看