1.作业1:
问题描述:
利用递归方法将十进制数字转换为二进制,并以字符串形式输出
递归编程–代码实现:
#递归首先是返回值确定,二是终止条件
def DecBin2(dec):
result = ''
#终止条件
if dec == 0:
return result
else:
#递归部分
result = DecBin2(dec // 2)
#返回值,要求每次递归后与前次结果叠加
return result + str(dec % 2)
print(DecBin2(8))
代码分析:
从返回值return部分出发:
return DecBin2(8//2) +str(8%2)
return DecBin2(4//2)+str(8%2)+str(4%2)
return DecBin2(2//2)+str(8%2)+str(4%2)+str(2%2)
return DecBin2(1//2)+str(8%2)+str(4%2)+str(2%2)+str(1%2)
因为终止条件为当形参为0时,return ‘’
则DecBin2(1//2)=DecBin2(0)–>return ‘’
所以最终为str(8%2)+str(4%2)+str(2%2)+str(1%2)
即为:‘1000’–(最终从递归终止处往回叠加)
2.作业2:
问题描述:
递归实现回文检测
递归编程–代码实现
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
#也就是让从起始字符串第一位开始进行比较分析,当有一次不满足时,则返回0,否则继续调用函数,结束条件当strat>end(下标不满足条件时)
string = str(input('请输入字符串:'))
length = len(string)-1
print(is_palindrome(string, 0, length))
代码分析:
当输入字符串为’12321’时,
运行过程为:
因为n[0] = n[4] -->is_palindrome(‘12321’,1,3),此时start=1<end=3
则因为n[1]=n[3]–>is_palindrome(‘12321’,2,2),此时start=2=end=2
则因为n[2]=n[2]–>is_palindrome(‘12321’,3,1),此时start=3>end=1
此时应该认为比较完毕,返回值为1;若中间任意一次比较结果不相等的话,那么返回值直接为0
递归编程–代码实现2
#本方法是利用字符串中所有元素运行一遍之后进行回文检测计数,若和字符串长度相等,则为回文,否则不是
i = [-1,0]#分别存储索引值和计数值分别为i[0]和i[1]
def huiwen2(str2,str3 = ''):
count = 0
if i[0] == len(str2)-1:
#终止条件
return count
else:
i[0] += 1
if str2[i[0]] == str2[len(str2)-i[0]-1]:
i[1] += 1
count = huiwen2(str2,str2[i[0]])
#返回值
return i[1]
str2 = str(input('请输入待检测字符串:'))
huiwen2(str2)
if i[1] == len(str2):
print('回文!')