拓展,Fibonacci螺旋

2022-07-19 08:30:41 字數 1759 閱讀 5326

#

該程式由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...