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岁!
网友评论