C++經(jīng)典算法問題:馮諾依曼鄰居問題丨兩種解法(內(nèi)含源碼示例)

問題說(shuō)明
某算法從一個(gè)1×1的方格開始,每次都會(huì)在上次圖形的周圍再加上一圈方格,在第n次的時(shí)候要生成多少個(gè)方格?下圖給出了n = 0,1,2是的結(jié)果。

解法一:本程序使用通項(xiàng)公式求解
代碼簡(jiǎn)述
若設(shè)第n次生成的方格數(shù)是a(n),則:
a(1) = a(0) + 4 * 1 a(2) = a(1) + 4 * 2 a(3) = a(2) + 4 * 3 ... a(n) = a(n-1) + 4 * n
化簡(jiǎn)可得:
a(n) - a(1) = 4 * (n + (n-1) + ... + 2 )
即:
a(n) = 2 * n*n + 2 * n + 1
則可得出a(n)的通項(xiàng)公式,即可用通項(xiàng)公式直接求解。
在程序中用Neumann2_3_12函數(shù)返回a(n)的值。
源碼分享
解法二:本程序使用遞推關(guān)系求解?
代碼簡(jiǎn)述
若設(shè)第n次生成的方格數(shù)是a(n),則:
a(1) = a(0) + 4 * 1 a(2) = a(1) + 4 * 2 a(3) = a(2) + 4 * 3 ... a(n) = a(n-1) + 4 * n
則可得:
a(n) = a(n - 1) + 4 * n
然后在代碼中使用遞歸法,遞歸結(jié)束條件為n = 0,即
if (n == 0) return 1;
則可寫出遞歸法的代碼。
在程序中用Neumann2_4_12函數(shù)進(jìn)行遞歸求解。
源碼分享
今天的分享就到這里了,大家要好好學(xué)C++喲~
寫在最后:對(duì)于準(zhǔn)備學(xué)習(xí)C/C++編程的小伙伴,如果你想更好的提升你的編程核心能力(內(nèi)功)不妨從現(xiàn)在開始!
微信公眾號(hào):C語(yǔ)言編程學(xué)習(xí)基地
整理分享(多年學(xué)習(xí)的源碼、項(xiàng)目實(shí)戰(zhàn)視頻、項(xiàng)目筆記,基礎(chǔ)入門教程)
歡迎轉(zhuǎn)行和學(xué)習(xí)編程的伙伴,利用更多的資料學(xué)習(xí)成長(zhǎng)比自己琢磨更快哦!
