上次說的計算算法可以根據(jù)游戲規(guī)則把100%確鑿的數(shù)字填入空格蹋盆,對于可以填入不止一個數(shù)字的數(shù)獨空格,有一個簡單的辦法來解決:試探墩衙!我可以依次填入可填的數(shù)字闸氮,并計算或者試探剩下的空格,重復(fù)下去直到全部填滿货抄,或者出現(xiàn)矛盾(如下圖):
你能找出每一個矛盾的方格矛盾在什么地方嗎述召?
試探法的流程圖:
從流程圖上你就會看出來,這個算法有一個不同尋常的地方蟹地,在試探了一個格子之后积暖,它會把試探后的棋盤當(dāng)作一個新參數(shù),再次調(diào)用自己去解決問題怪与!
這種解題的方法夺刑,我們稱之為遞歸,類似一只咬住了自己尾巴的蛇!
讓我用一個簡單的例子來告訴你什么叫做遞歸:
比如遍愿,計算階乘:3存淫!= 3 x 2 x1,“!”是階乘符號!普通的做法就是用循環(huán)乘法來解決沼填。
換一個思路纫雁,計算n的階乘,可以換算成n* (n-1)倾哺!轧邪,本來,我們的目標(biāo)是n的階乘,我們換成了一個跟A很相似的目標(biāo):n乘以n-1的階乘羞海,這個目標(biāo)忌愚,簡單了一點點工三,總體上转培,還是使用了A自身(階乘算法)。遞歸蕊唐,就是調(diào)用自身腊徙,可以簡單的如此理解简十!
現(xiàn)在,n-1的階乘可以進(jìn)一步理所當(dāng)然的換成(n-1)* (n-2)撬腾!
遞歸螟蝙,就是一步步的進(jìn)入更深層的自己,
一步步的進(jìn)入更深層民傻,當(dāng)然是離問題更遠(yuǎn)了胰默,它必然有個返回的地方,否則漓踢,程序永遠(yuǎn)不會有結(jié)束的時候牵署,也就不會有結(jié)果,問題也就不會得到解決喧半!
這里奴迅,n一直減下去,直到不能再減挺据,正好取具,直到1,正好吴菠,1的階乘我們是知道的:1者填!
從這里,遞歸的深入開始返回做葵,返回到了1+1的地方占哟,于是我們得到2的階乘是2x1 = 2,注意,這里的2x1不是階乘定義上的2x1榨乎,是n的階乘= (n* (n-1)的階乘)的2x1怎燥!
再進(jìn)一步的返回,到3 了蜜暑,3铐姚!= 3 x(2的階乘) = 3X2 = 6
再返回,到4肛捍, 4隐绵! = 4 x3的階乘 = 4x6=24!
......
直到n拙毫,得到結(jié)果依许!
遞歸有什么好處呢?就是簡單缀蹄!
看過盜夢空間的話峭跳,遞歸的形式,就類似它的夢套夢缺前!