美文网首页python入门
python第22、23、24课练习——递归

python第22、23、24课练习——递归

作者: YoYoYoo | 来源:发表于2019-05-26 10:34 被阅读0次

1、递归在编程上的形式是如何 表现的?

答:在编程上,递归表现为函数调用本身这么一个行为。
举个例子(递归求阶乘):

def factorial(n):
    if n == 1:
        return 1
    else:
        return n * factorial(n-1)

number = int(input('请输入一个整数:'))
result = factorial(number)

print('%d的阶乘是:%d' % (number,result))

2、递归必须满足哪两个基本条件?

答:①函数调用自身;②设置了正确的返回条件。

3、思考一下,按照递归的特性,在编程中有没有不得不使用递归的情况?

答:例如汉诺塔、目录索引(因为你不知道这个目录里面是否还有目录)、快速排序(二十世纪十大算法之一)、树结构的定义等,如果使用递归会事半功倍,否则会导致程序无法实现或难以理解。

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

答案:

def Dec2Bin(dec):
    result= ''

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

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

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

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

get_digits(12345)
print(result)

6、还记得求回文字符串那道题吗?现在如何使用递归来解?

解题思路:方法有许多中,不过综合效率来说,小甲鱼的实现方法比较朴素:利用递归每次索引前后两个字符进行对比,当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)

运行:

请输入一个字符串:上海自来水来自海上
"上海自来水来自海上"是回文字符串!

7、使用递归编程求解以下问题:

“有5个人坐在一起,问第5个人多少岁?他说比第4个人大2岁。问第4个人多少岁?他说比第3个人大2岁。问第3个人多少岁?他说比第2个人大2岁。问最后一个人多少岁,他说10岁。请问第5个人有多少岁?”

解题思路:
利用递归的方法,递归分为回推和递推两个阶段。要想知道第5个人的岁数,需知道第4个人的岁数,以此类推,推到第1个人(10岁),再往回推。
参考答案:

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

print('哈哈,我知道了!第五个人的年龄是%d岁!' % age(5))

输出:

哈哈,我知道了!第五个人的年龄是18岁!

相关文章

网友评论

    本文标题:python第22、23、24课练习——递归

    本文链接:https://www.haomeiwen.com/subject/nxfxtctx.html