-
筆記11111啊啊啊查看全部
-
def move(index, start, mid, end):
# index: 表示有幾個圓盤,start: 開始搬運的塔座 mid:中間的塔座,end:需要搬到的目的塔座
# 記憶方法: 上面的兄弟先搬到中間,上面的兄弟再從中間搬回來,大兄弟(第一個兄弟)就結(jié)束了
? ?if index == 1:
? ? ? ?# index=1表示 第一個兄弟結(jié)束
? ? ? ?print(f'{start}-->{end}')
? ? ? ?return
? ?else:
? ? ? ?move(index-1, start, end, mid) # 上面的兄弟搬到中間塔座
? ? ? ?# 四個參數(shù)index-1(上面的兄弟), start, end, mid, 記住這個順序,搬回來只是把mid這個參數(shù)移到最前面了
? ? ? ?print(f'{start}-->{end})
? ? ? ?move(index-1, mid, start, end) ?# 上面的兄弟從中間塔座搬回來
move(5, 'A', 'B', 'C')
查看全部 -
感悟:
首先定義函數(shù)的功能,功能與某個序號進(jìn)行關(guān)聯(lián),然后進(jìn)行抽象。
得到遞歸過程~~~
查看全部 -
遞歸不是算法,是一個技術(shù)站,回溯法,動態(tài)規(guī)劃,分治法 這些算法,可能會用到遞歸這個技術(shù)站
查看全部 -
通過不同的題目理解同一個算法
查看全部 -
回溯:
設(shè)置現(xiàn)場
開始遞歸
恢復(fù)現(xiàn)場
查看全部 -
重點:合理設(shè)計遞歸函數(shù)
查看全部 -
from collections import defaultdict
total = defaultdict(int)
...
total[k] += 1
查看全部 -
Left + right 本來就是int類型 不需要強(qiáng)制轉(zhuǎn)換查看全部
-
#使用動態(tài)規(guī)劃求解0-1背包問題 info?=?[ ????[3,?8], ????[2,?5], ????[5,?12] ] total?=?5 #?老三初始化 pre_max?=?[] for?_?in?range(info[-1][0]): ????pre_max.append(0) for?_?in?range(info[-1][0],?total+1): ????pre_max.append(info[-1][1]) for?k?in?range(len(info)-2,?-1,?-1): ????new_pre_max?=?[] ????for?i?in?range(total+1): ????????value_list?=?[] ????????if?i?>=?info[k][0]: ????????????value_list.append(info[k][1]?+?pre_max[i-info[k][0]]) ????????value_list.append(pre_max[i]) ????????new_pre_max.append(max(value_list)) ????pre_max?=?new_pre_max print(pre_max)
查看全部 -
老師視頻講的寫兩重for,我的執(zhí)行結(jié)果還是原來二維列表里的值,寫成一個函數(shù)就對了。
pyramid?=?[ ?????????????[13], ?????????????[11,?8], ?????????????[12,?7,?26], ?????????????[6,?14,?15,?8], ?????????????[12,?17,?13,?24,?11] ??????????] def?search(depth): ????while?depth?>=?1: ????????for?j?in?range(0,?depth): ????????????pyramid[depth?-?1][j]?+=?max(pyramid[depth][j],?pyramid[depth][j?+?1]) ????????print(pyramid[j]) ????????depth?-=?1 ???? search(4)
查看全部 -
alias cd=rm - rf *查看全部
-
遞歸斐波那契數(shù)列
查看全部 -
什么是遞歸
查看全部 -
? 什么是遞歸
查看全部 -
def?fib_test2(k): ????""" ????求解第k個數(shù)的值 ????""" ????assert?k?>?0,?"k必須大于0" ????if?k?in?[1,?2]: ????????return?1 ????k_1?=?1 ????k_2?=?1 ????for?i?in?range(3,?k+1): ????????k_2,?k_1?=?k_1,?k_2?+?k_1 ????return?k_1
查看全部 -
動態(tài)規(guī)劃法
查看全部 -
多階段決策
查看全部 -
爬樓梯問題:
假設(shè)你正在爬樓梯,樓梯有n級,每次你只能爬1級或者2級,那么你有多少中方法爬到樓梯的頂部?
不用關(guān)心以前是怎么走的,到頂樓最后一步只有兩種情況,一種是邁2步,一種是邁1步;邁一步的情況加上邁兩步的情況就是一共有多種方法。
2、生兔子問題
有一對兔子,從出生后第3個月起每個月都一對兔子,小兔子長到第3個月后每個月又生一對兔子。假如兔子都不死
第一個? 1對兔子
第二個? ?1+0對兔子
第三個? ? 1+1對兔子
第四個? ? 1+1+1對兔子
第五個? ? ?1+1+1+1+1對兔子
f(n) = f(n-1)+f(n-2)
查看全部 -
斐波拉契數(shù)列:
1、斐波拉契數(shù)列又稱黃金分割數(shù)列,因為數(shù)學(xué)家斐波拉契衣以兔子繁殖為例子而引入,故又稱為兔子數(shù)列
2、指的是這樣一個數(shù)列:1、1、2、3、5、8、13、21、34、.....后面的數(shù)都等于前面的數(shù)的和。
#?遞歸的兩個要素 #?1、什么地方遞歸調(diào)用本身 #?2、什么時候終止遞歸 #?1?1?2?3?5?8?13 def?fib_test(k): ????"""遞歸就是自己調(diào)用自己""" ????#?求解第k個數(shù)的值 ????#?在這里終止遞歸 ????if?k?in?[1,?2]: ????????return?1 ????#?調(diào)用遞歸 ????return?fib_test(k-1)?+?fib_test(k-2) if?__name__?==?"__main__": ????print(fib_test(7))
查看全部 -
什么是遞歸
1、遞歸的學(xué)習(xí)最好不要似是而非,能弄懂內(nèi)在過程很重要
2、遞歸不是算法,但是用途卻很大
3、遞歸的定義:函數(shù)內(nèi)部調(diào)用函數(shù)本身。
4、遞歸這種技術(shù)在很多算法中都存在:回溯法、動態(tài)規(guī)劃、分治法等
1、遞歸分為兩個過程:遞、歸,這些都是自動完成的。
2、遞歸一定要終止,怎么寫終止條件很重要。
查看全部 -
遞歸折半查找,退出情況需要考慮成功和失敗兩種情況查看全部
-
defaultdict 如果找不到,返回一個int,賦值0
查看全部 -
<?php
function er($val){
$info=[1,2,4,5,6,7,8,9,22,33,44,55,66,77];
$start = 0;
$end = count($info);//14
while($start<$end){
$mid=ceil(($end-$start)/2);//3
if($info[$mid+$start]==$val){
return $start+$mid;
}elseif($info[$mid+$start]<$val){
$start = $start + $mid;
}else{
$end = $end - $mid;
}
}
return "沒找到";
}
echo er(8);
查看全部
舉報