自學java中,目前有一個棘手的問題是,碰到一些看似特別簡單的數學題,比方說階乘,再比如說計算銀行複利等等,這些都是比較簡單的初高中知識,但是就是寫不出來…


題主應該補充下數學以及基礎編程能力。簡單的循環,遞歸應該都能解決上面的問題。


這說明你編程還沒入門,如果是微積分,求最優解之類的不會倒還情有可原,那個需要會點計算方法之類的,你這個不就一行代碼的事


階乘為什麼寫不出?除非數字太大,入門級別寫個遞歸就可以了啊


不是簡單的數學問題,是程序沒有入門,或者說是不知道怎麼用程序解決問題,首先你要在數學上知道怎麼解決這個問題或者其他的數學問題,然後按照數學上的步驟寫代碼,這是最簡單的,給你兩個思路,第一是老實的寫公式寫輸出,每次變數加1,你可以讓程序加,也可以自己寫輸入,知道結果和題目要求一樣,這是最入門的,第二你可以做個循環加條件判斷,當結果和題目一致時輸出此時變數,還有更高級的用類對象實現,其實題主可以試這樣考慮1+2+3+....+100用程序求,思路無非也是這樣的,第一數學上你知道一項一項加下去可以得最終結果,第二,利用等差數列求和公示算任意等差數列,這兩種方法都可以求出同樣的答案,同時也都可以用程序實現,但是假設你不知道等差數列求和公示,你是不是就不知道第二種方法,於是你在數學上都不知道怎麼解決的問題肯定你也就無法通過程序實現,一旦知道一個實際的問題解決流程,那麼在難的問題都能用程序實現,當然還需要考慮算力和位數及儲存,比如求輸出素數的個數,建議先看c語言。


學藝不精,還能說啥?給你答案嗎?


不是無法,是你不會

繼續學習,加油


因為

你學這些初高中「簡單」的數學,到現在中間不斷熟悉、運用、強化到現在多少年了?

而你用這門語言多久了?有多熟悉?

兩者對你的掌握程度,沒有可比性。


遞歸是解決一切問題的王道。


也許看看sicp可以解決這個問題。


不要一看到問題就上機寫代碼,首先應該用筆在紙上寫寫畫畫,尤其加強繪製流程圖的基本功,另外,不要一寫完代碼就急著run,一定要自己檢查,確認無誤再run(雖然可能還會出錯,但能提高自己的分析能力)。


階乘都寫不出來的么?說明你要努力啊


這是因為你的代碼表達能力弱,寫代碼就像人說話一樣,有時想表達一個意思,但是怎麼努力就是說不出來,有時是因為看的少聽的少,有些辭彙你根本不知道,有時是詞語組合能力不行,有時是邏輯混亂前言不搭後語!

編程語言作為一種與電腦溝通的語言,也會存在詞不達意,邏輯混亂的問題。要解決這類問題就要與別人多溝通,看看你的思維和別人差別在什麼地方,多次對比復盤後會慢慢好轉的。


建議題主學一下循環,您說的那些題真的是簡單題,在編程里也一樣。


說明你需要繼續學習。

至少把你正在學的書學完再來問。


數學是上帝的語言,代碼不是。


學計算機語言,跟學演算法和數據結構是兩回事。


數學中有好多唯心成份。

特別是無窮大,無窮小,在計算機中是無法實現這個函數並在有限時間內返回結果。數學中很多公式依賴於無窮大,無窮小。數學軟體都是特殊處理,人為規定返回結果,並不是真正算出來的。

像無窮大根本不存在於現實世界,無窮大是不可能在有限非連續空間中表示出來,如果有,那無窮大和有限非連續空間的交集是無限還是有限?交集的邊界在那裡?

像無窮小,在現實世界是量子世界,離散化概率化是量子世界特徵,並不是數學上的連續函數,像量子時間晶體的發現更是證明了這種非連續性。

這些浮沙讓數學一直發展不前,數學公式推導後還需要演算法修正,並不客觀可計算真理,相反演算法才是客觀的。

深度學習應用在圍棋上取得了很大成功,但深度學習的本質是反數學的,是完全計算展開的,圍棋下一步下a點還是b點,可以給出客觀答案。而依靠數學公式是無法推導出為什麼下a而不是b。

數學在某種程度上變得不可靠,就是這種無窮大無窮小連續搞的,而計算機中的計算是離散的,只依靠0-1,更加客觀,深度學習更加說明了演算法的科學性。


階乘哪裡簡單了……我知道的就有4種寫法,我便考你一考


推薦閱讀:
相关文章