- the last (05.06.18 16:53:32)
3 örnek sonsuzs kadar çalışamaz stackoverflow olur
- Sir Anthony Hopkins (05.06.18 16:56:08)
yani direk c standardina gore soruyorsa bence nuevo'nun cevabi yanlis. Cevap "yalniz 2" olmali.
1 icin n unsigned int olarak verilmis. unsigned int overflow edince 0'dan tekrar baslar, for loop da n > 0 gecerli olmaz ve program sonlanir.
2 icin while'da 0 olmayan her sey true sayilir. n = -n olunca n -1 ve 1 arasinda doner durur ve while bunu hep true olarak gorur, sonsuza kadar calisir.
3 icin, teoride sonsuza kadar calisabilir tail call optimization falan durumlarinda ama c icin konusursak recursion stack uzerinde olacagi icin bir sure sonra stack overflow verip program sonlanacaktir. ama bazi compilerlar TCO yapabilir o durumda stack overflow olmayabilir, standart implementasyona birakmistir diye biliyorum. o yuzden sonsuza kadar kesin calisir diyemeyiz ama algoritmayi sonsuz tape'i olan bir turing machine'de calistiracak olsaydik sonsuza kadar calisirdi evet. cevaplarda 2 ve 3 olmadigi icin bunu c standardina gore yorumlamamiz isteniyor denilebilir o zaman da cevap "Yalniz 2" olur.
Benim C biraz pasli ama eyorlamam bu kadar.
edit: Sir Anthony Hopkins, 1 ve 2 de stack overflow olmasi icin bir sebep yok cunku recursion yok. 1'de daha once yazdigim gibi numerical overflow olur, n 0 olur bir yerde o kadar. 2 sonsuza kadar calisir gibime geliyor cunku while 0 olmadigi surece true sayilir diye biliyorum.
1 icin n unsigned int olarak verilmis. unsigned int overflow edince 0'dan tekrar baslar, for loop da n > 0 gecerli olmaz ve program sonlanir.
2 icin while'da 0 olmayan her sey true sayilir. n = -n olunca n -1 ve 1 arasinda doner durur ve while bunu hep true olarak gorur, sonsuza kadar calisir.
3 icin, teoride sonsuza kadar calisabilir tail call optimization falan durumlarinda ama c icin konusursak recursion stack uzerinde olacagi icin bir sure sonra stack overflow verip program sonlanacaktir. ama bazi compilerlar TCO yapabilir o durumda stack overflow olmayabilir, standart implementasyona birakmistir diye biliyorum. o yuzden sonsuza kadar kesin calisir diyemeyiz ama algoritmayi sonsuz tape'i olan bir turing machine'de calistiracak olsaydik sonsuza kadar calisirdi evet. cevaplarda 2 ve 3 olmadigi icin bunu c standardina gore yorumlamamiz isteniyor denilebilir o zaman da cevap "Yalniz 2" olur.
Benim C biraz pasli ama eyorlamam bu kadar.
edit: Sir Anthony Hopkins, 1 ve 2 de stack overflow olmasi icin bir sebep yok cunku recursion yok. 1'de daha once yazdigim gibi numerical overflow olur, n 0 olur bir yerde o kadar. 2 sonsuza kadar calisir gibime geliyor cunku while 0 olmadigi surece true sayilir diye biliyorum.
- robokot (05.06.18 17:00:11 ~ 17:01:35)
sonsuz döngü içinde çalışır dedim gençler, sonsuza kadar çalışır diyebilmek zaten pratikte mümkün değil.
- the last (05.06.18 17:02:32)
tamam hepsi sonsuz dongu icinde de calismaz, cevabimda acikladim. online compiler'da javascript uzerinden calistigi icin print islemleri browser tabini kilitliyor ondan sonsuzmus gibi gozukebilir.
- robokot (05.06.18 17:05:56)
@robokot online compiler bir kabuk gibi verilen c kodunu sunucuda çalıştırır ve gelen isteği gösterir, ilgili sayfada bir donma olmadı zaten. 1. örnekte yanılmışım ama diğer örneklerde sonsuz döngü gerçekleşiyor göründüğü kadarıyla.
- the last (05.06.18 18:41:35)
1