第二十三、二十四課:函數(shù):這幫小兔崽子和漢諾塔

內(nèi)容來源于網(wǎng)絡(luò),本人只是在此稍作整理,如有涉及版權(quán)問題,歸小甲魚官方所有。

練習(xí)題(來自小甲魚官方論壇)

編程題

0.使用遞歸編寫一個(gè)十進(jìn)制轉(zhuǎn)換為二進(jìn)制的函數(shù)(要求采用“除2取余”的方式,結(jié)果與調(diào)用bin()一樣返回字符串形式)

答:

def binB(num):
    # 剝洋蔥思路
    # 每一次都要做兩件事 num // 2; num % 2
    # 先預(yù)設(shè)一個(gè)空字符串: result
    result = ''

    if num:
        # 開始剝洋蔥 num // 2,直到洋蔥皮剝完為止
        # 當(dāng)?shù)阶詈笠粚樱╪um = 1 )
        # 開始把洋蔥還原,返回 num % 2, 有點(diǎn)類似于出棧
        result = binB( num // 2)
        return result + str(num % 2)
    else:
        # 還原到最外面(實(shí)際是在剝到最后一片式,還原回去所有的result),出結(jié)果
        return result

print(binB(8))

1.寫一個(gè)函數(shù)get_digits(n),將參數(shù)n分解出每個(gè)位的數(shù)字并按順序存放到列表中。舉例:get_digits(12345)==>[1,2,3,4,5]

答:思路:利用除以10取余數(shù)的方式,每次調(diào)用get_digits(n/10),并將余數(shù)存放到列表中即可。要注意的是結(jié)束條件設(shè)置正確。

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

get_digits(123)
print(result)

2.還記得求回文字符串那道題嗎?現(xiàn)在讓你使用遞歸的方式來求解,親還能傲嬌的說我可以嗎?

答:

def huiwen(temp,start,end):
    if start > end:
        return 1
    else:
        if temp[start] == temp[end]:
            return huiwen(temp,start+1,end-1)
        else:
            0

temp = input('請(qǐng)輸入一段文字:')
length = len(temp)
end = length-1
if huiwen(temp,0,end):
    print('%s是一個(gè)回文字符串!'%temp)
else:
    print('%s不是一個(gè)回文字符串!'%temp)

3.使用遞歸編程求解以下問題:

有5個(gè)人坐在一起,問第五個(gè)人多少歲?他說比第4個(gè)人大2歲。問第4個(gè)人歲數(shù), 他說比第三個(gè)人大兩歲,問第三個(gè)人,又說比第二個(gè)人大兩歲,問第二個(gè)人,又說比第1個(gè)人大兩歲。 最后問第一個(gè)人,他說是10歲。請(qǐng)問第5個(gè)人多大?

答:解題思路:利用遞歸的方法,遞歸分為回推和遞推兩個(gè)階段,要想知道第五個(gè)人的歲數(shù),必須要知道第四個(gè)人的歲數(shù),依次類推,推到第一個(gè)人10歲,再往回推。

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

print("第五個(gè)人的歲數(shù)是%d歲" % age(5))

4.請(qǐng)寫下這一節(jié)課你學(xué)習(xí)到的內(nèi)容:格式不限,回憶并復(fù)述是加強(qiáng)記憶的好方式!

  • 斐波那契數(shù)列:F(1)=1,F(xiàn)(2)=1,F(xiàn)(n)=F(n-1)+F(n-2)(n>=2)
非遞歸方法:
def fab(n):
    n1,n2,n3 = 1,1,1
    if n<1:
        print('輸入有誤!')
        return -1
    while (n-2)>0:
        n3 = n2 + n1
        n1 = n2
        n2 = n3
        n -= 1
    return n3
------------------------------------------
遞歸方法:
def fab(n):
    if n <= 1:
        return 1
    else:
        return fab(n-1) + fab(n-2)

i = int(input('請(qǐng)指定需要多少項(xiàng):'))
for j in range(0,i):
    print(fab(j))
  • 漢諾塔
def hanoi(n,x,y,z):
    if n == 1:
        print(x,'->',z)
    else:
        hanoi(n-1,x,z,y)#將x上的前n-1個(gè)盤移動(dòng)到y(tǒng)上
        print(x,'->',z)#將x上的n盤移動(dòng)到z上
        hanoi(n-1,y,x,z)#將y盤上的n-1個(gè)盤移動(dòng)到z上

n = int(input('請(qǐng)輸入漢諾塔的層數(shù):'))
hanoi(n,'X','Y','Z')

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 內(nèi)容來源于網(wǎng)絡(luò),本人只是在此稍作整理,如有涉及版權(quán)問題,歸小甲魚官方所有。 練習(xí)題(來自小甲魚官方論壇) 0.遞歸...
    無罪的壞人閱讀 9,620評(píng)論 6 22
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,939評(píng)論 25 709
  • 內(nèi)容來源于網(wǎng)絡(luò),本人只是在此稍作整理,如有涉及版權(quán)問題,歸小甲魚官方所有。 練習(xí)題(來自小甲魚官方論壇) 0. 你...
    無罪的壞人閱讀 12,100評(píng)論 2 22
  • 守得住云開,看到見金邊,幸福偏愛那些堅(jiān)持和簡(jiǎn)單的人。 閨蜜L,完美主義控,從工作到生活體現(xiàn)的淋漓盡致。比如說:每次...
    臻靜閱讀 635評(píng)論 0 0
  • ~表長(zhǎng)高音 我對(duì)你的感覺,像火焰會(huì)屏息 那么凝噎炙熱,我不信你不知 陣痛之后的真實(shí),直叫我心悸 心碎流露的卑微,我...
    大美不仁閱讀 617評(píng)論 0 1

友情鏈接更多精彩內(nèi)容