四月 24, 2008
» ifort 10.1.015 note again

On etch

apt-get install libstdc++5 lib32gcc1 ia32-libs

七月 30, 2007

hoamon's sandbox
hoamon
hoamon's sandbox is about »

tag cloud

» 考研究所時我還不會寫遞迴

中興營管的研究特色:用程式+管理數學來解決營建問題。

所以入學考試時,通常會考一題程式設計。而我那一年的考題是:「請把 1、2、3、4、5 的所有排列情形列出」。還好我大一計概被當,大四才重修,沒忘了什麼是 Fortran 及 PE2,於是寫這個程式對我來說好像不會太難。

但主要的問題是那時的我認為程式設計只有 for loop + if..else.. 而已,所以一個該用遞迴寫的問題,我該如何實作。還好數學幫了我,因為在相同個數的自然數子集合中,其子集合的積及和必屬惟一值的特性,讓我用 5 個迴圈把問題解決,程式如下(因為我已忘了 Fortran ,所以用 Python 作範例):

1 for i1 in xrange(1,6):
2 for i2 in xrange(1,6):
3 for i3 in xrange(1,6):
4 for i4 in xrange(1,6):
5 for i5 in xrange(1,6):
6 if i1*i2*i3*i4*i5 == 120 and (i1+i2+i3+i4+i5) == 15:
7 print '%d,%d,%d,%d,%d' % (i1, i2, i3, i4, i5)
這個程式或許談不上美感,但它讓我滿意未來的發展。能如願進入中興營管,而不是朝陽營管,學的不是 VB + 基因演算法,而是 VB + Matlab + Linux + PHP + Open Source + 管理數學。

而使用遞迴的方法如下:
 1 def Line(ori, level, res):
2 if level == 0:
3 print ', '.join(res)
4 return
5
6 for i in xrange(len(ori)):
7 res.insert(0, ori[i])
8 tmp = ori[:]
9 null = tmp.pop(i)
10 Line(tmp, level-1, res)
11 res.pop(0)
12
13 ori = ['1','2','3', '4', '5']
14
15 Line(ori, len(ori), [])

biggo.com.tw

A Django site.