2.python--递归编程作业部分

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('回文!')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值