#該程式由023遞迴這課中的fibonacci數列遞迴寫法修改而成
#在寫的過程中發現,如果要正確引導使用者的每一次輸入,寫的**比主程式還要多
#當然,為了使程式在使用者互動過程中顯得更加友好,提供錯誤提示也是乙個好習慣##
由fibonacci螺旋遞迴寫法引申出的字串符格式化和內建方法的探索
level = input('
請輸入fibonacci螺旋層數:')
#判斷輸入字元是否為大於0的整數,.isdigit()方法是判斷字串符是否為整數
#當然非數字或者是小數點都不在整數範圍
#在shell測試了一下發現負整數也不能用.isdigit()方法
while
not level.isdigit() or int(level) ==0:
level = input('
輸入錯誤,請重新輸入大於0的正整數):')
#注意,我在這裡用了float使輸入的數字變為浮點數
#以我現在的知識,如果這裡不用float轉化,
#那麼接下來的函式裡 fab(level-1) + fab(level-2)會變為字串符的拼接。原因目前未明。
print('
注意:兩個數字不能同時為0!')
firstnum = float(input('
第乙個數字'))
secondnum = float(input('
第二個數字'))
#判斷兩個數字是否同時為0,注意,用and這個操作符
while firstnum == 0 and secondnum ==0:
print('
注意:兩個數字不能同時為0!')
firstnum = float(input('
第乙個數字'))
secondnum = float(input('
第二個數字'))
#迴圈列印輸出,如果不加for語句,那麼只輸出最後那個結果
#如果for level in裡的level換成其他,那麼
for level in range(1,int(level)+1):
#以下是遞迴主程式
deffab(level):
#初始最開始兩個數字的值
if level == 1:
global
firstnum
return
firstnum
elif level == 2:
global
secondnum
return
secondnum
#如果沒有上面那兩個if判斷,那麼程式將進入死迴圈,原因是不是因為遞迴沒給初始值呢?
else
:
return (fab(level-1) + fab(level-2))
result =fab(level)
#%.2f把浮點數格式化為帶兩個小數點輸出
print('
%.2f
' % result, end = '
')
測試:
請輸入fibonacci螺旋層數:abc輸入錯誤,請重新輸入大於0的正整數):-5輸入錯誤,請重新輸入大於0的正整數):0
輸入錯誤,請重新輸入大於0的正整數):8注意:兩個數字不能同時為0!
第乙個數字-2.9第二個數字3.15
-2.90 3.15 0.25 3.40 3.65 7.05 10.70 17.75
螺旋方針(螺旋矩陣)
螺旋方陣 time limit 1000ms memory limit 65536kb problem description 的螺旋方陣當n 5和n 3時分別是如下的形式 請給出乙個程式,對於任意的輸入 0 11 輸出按照上面規律所獲得的 的螺旋方陣。input 輸入第一行為整數 0 10 代表有...
BFS拓展 康拓展開
原諒我我實在不想粘題目了 這道題吧,本來不想加進來的。其實就是對於八數碼問題的乙個補充,上面可愛的出題人已經將康拓展開講的很清楚了。照著敲就行。include using namespace std typedef long long ll inline ll read const ll maxn ...
計算Fibonacci數列
上機內容 用動態分配空間的方法計算fibonacci數列的前30項並儲存到動態分配的空間中 上機目的 學習fibonacci數列演算法 我的程式 includeusing namespace std void main int p new int 30 p 1 p 1 1 cout p p 2 fo...