C語言病毒繁殖,為什麼一旦輸入93,編譯器就沒反應了?

時間 2021-06-01 18:46:38

1樓:王旭東

這題嚇死我了,尋思著有什麼程式需要在編譯的時候輸入?或者程式中乙個數字能造成編譯程式宕機?這真的是超級病毒了!

題主,拜託先把一些基本概念搞搞清楚好吧!語法和演算法方面其他人都說過了,在此不表。但是好歹自己設個斷點看看呢!

單步執行試試看!改變一下輸入的資料試試看!先從n比較小的數開始單步執行。

實在不會能不能在遞迴裡面設幾個printf呢?自己查查程式執行的時候到底是真的宕機了還是在不停的做運算?

2樓:

顯然,這是斐波拉契數列,朋友一定是,受某些書本的誤導,所以採用遞迴;

但是,這個例子,根本不應該使用遞迴,因為,這樣會降低效率,浪費記憶體。

朋友應該用迴圈,而不是遞迴。

朋友來思考一下,我們設該數列的第 n 項為 ,假設需要計算 ,程式會這樣計算:

這裡有重複計算的問題,朋友注意到了嗎?

對於這個題目,我們只需要得到第 n 項,我們並沒有必要,把之前的 (n-1) 項,也挨個儲存;而遞迴,就存在這個弊端:

有人說用陣列,其實對此題來說,陣列也沒必要;我們只需要最後那一項。

顯然,用迴圈就很好,因為,迴圈只保留,最近一次的運算結果,之前的資料會被原地覆蓋;而且,迴圈也不存在,重複計算的情況。

當你輸入較小的 n 時,可能覺察不出,遞迴的效率多低;當你輸入 93 這樣較大的 n 時,遞迴的弊端就暴露出來啦。

= n) ~return ~0;" eeimg="1"/>n ) ~~~~return ~1;" eeimg="1"/>

3樓:MelodiCly

當輸入為3時,需要計算bd(1)+bd(2),這兩項可以立即得出結果,計算所需時間可忽略不計,只需考慮加法用時,故總共需要0+0+1=1次計算。

當輸入為4時,需要計算bd(2)+bd(3),總計0+1+1=2次計算。

當輸入為5時,需要計算bd(3)+bd(4),總計1+2+1=4次計算。

當輸入為6時,需要計算bd(4)+bd(5),總計2+4+1=7次計算。

使用python計算bd(93)的計算量

res=[0

]*94foriin

range(3

,94):res[i

]=res[i-

2]+res[i

-1]+

1print

(res[93

])# 12200160415121876737

大約為1.22e19,很顯然正常的計算機處理器算這個需要的時間會很長,因此你需要找到乙個更高效的演算法。

4樓:小北

這道題考察的是斐波那契數列,解法比較多,有遞迴法、遞推法、矩陣快速冪、公式法等。你採用的是比較容易理解的遞迴法,遞迴法的一大缺點就是會重複計算已經計算過的節點,導致時間複雜度達到了驚人的 O(2^n)。

乙個優化措施就是採用記憶化map,記錄已經計算過的節點值,保證每個節點只被計算一次,就可以將時間複雜度將至 O(n)。

具體可以參考下面這篇知乎回答:https://zhuanlan /p/56444434

5樓:速杉隼人

編譯器沒反應?我還以為是GCC之類的崩了呢。

結果一看是Console介面。。。

另外:乙個看起來出錯的地方在於輸出語句不正確,把long long unsigned int當成了unsigned int來輸出。我猜測你可能是想使用%llu,但很明顯你把l和1弄混了,弄成了%11u。

好吧~_~

感覺就是你的數實在太大了。。。

6樓:

並不是編譯器沒反應了,編譯器一直再給你運算,是數量級太大了,編譯器要計算2^90多次方,先不說遞迴可能爆棧的問題吧,2^90次方就已經是10^27數量級了,計算機一秒大概可以執行10^9次方,所以說大概需要10^18秒,自己去算算要多久吧。這麼大的數字,記憶體要轉不下遞迴儲存的資料的。

為什麼 C 語言的輸入輸出函式比 C 的輸入輸出流要快?

nolanzz 用流輸出的話,貌似用cerr會比cout更快一些 提醒使用std ios sync with stdio false 這個會導致流讀寫和標準讀寫不能混用,oj上讀寫會出現問題,我本地使用clang貌似沒有問題 cin cout這些不能和scnaf printf這些一起用 Isaac ...

朱一旦為什麼要用《非浪》內涵B站?

司徒南 就乙個有點錢,然後就覺得自己可以指點江山,天天陰陽怪氣的人。我就是怪了。怎麼去非洲就怎麼了,在非洲發財的人少嗎?比如達之路集團老總就是在非洲混出名堂的,你要是在阿富汗你都能混出名堂,非洲就怎麼了,70年代中國不是一樣窮,當時台灣一些小企業不也都是在中國做大的嗎?旺旺集團當時也是小企業。朱一旦...

為什麼生命一旦抽離,寄居體立刻物化?

恨別鳥驚心 然後我就感到飢餓了。然後我就感覺不到飢餓了。不是都一樣嗎?有什麼太大區別嗎?其實沒有吧。如果我一直不進食的話,那不就停止了嗎?停止了一項運動以後,另一項運動就會成為主要的運動。我每天都在氧化呀!我每天都在腐朽腐爛呀!但是我生長還是很有速度的。就是這樣子。愛好植物。哎呀,好植物!從越簡單的...