recur(temp,num,kere){ if(kere==0 ) return; if(temp==num){ Print(num+”=“) sum=num*(num+1)/2 print(sum) Println() recur(0,sum,kere-1) } Else{ Print (temp +”+”) Recur(temp+1,num,kere) } } Main(){ recur(0,num,kere) } |
Sağol fakat C++ kodu olsa iyi olur. Ayrıca bu hangi dil? Java diyeceğim sonda noktalı virgül yok. Sonuçta kodu deneyemiyoruz. |
Pseudocode hocam int'leri, noktalı virgülleri vb ekleyince java oluyor, c++ da olur, syntaxları benzer zaten dh baştaki boşlukları sildiğinden süslü parantezleri takip edince görünür oluyor https://codebeautify.org/javaviewer/cbd92e17 Burdan bakınca anlaşılır |
Pseudo kodları deneyemeyiz dolayısıyla tartışamayız. Gerçek kod lazım bize. Benim kodları örneğin g++ 'a gir, hatasız çalışır. Gönderi üstündeki buton panelinde "code" etiketi içine girince kodları indent'ine kadar doğru gösterir; codebeautify.org a gerek yok (kısa kodlar için) |
https://onlinegdb.com/B1-ree-xS Buraya java kodunu koydum, çalışıyor Uç noktalar için kontrol yok mesela negatif vb girerse sıkıntı olabilir konuda siz nasıl yaparsınız demişsiniz, Pseudocode ile anlatmak en doğrusudur, yoksa gidip tam kod yazmak gereksizlik oluyor ama yine de üstteki linkte yazdım |
Okey fakatpseudo koda gerek bırakmayacak kadar kısa bir problem. Şimdi birşeyler atıştırıyorum, kodları denerim sonra... |
// Example program bu kısa bir şey lakin program çıkan sonuca göre yapıyor. döngüyü değil :) |
Şimdi oldu. Güzel, kod doğru şekilde çalışıyor fakat ufak bir eksik var. Toplam degeri hesaplama için matematik formul kullandın. Onu bir değişken / parametre ile yapsan daha iyi çözüm olurdu. @berce O nedir öyle :) |
bunu benim için söylüyorsan eğer :) ben tek yada çift ardışık sayıların sadece iki farkla değiştiğini söylerim. 2+2=4+2=6+2=8+2=10 1+2=3+2=5+2=7+2=9 edit: Hep unutuyorum. bilgisayarın sıfırı dahil ettiğini aslında sayma sayısı diye şeyi icad edenin(sen ne anlarsan ama bende küfür yok :)) +1 fazlasını kullanacaksın. Diğerlerini şimdi yapıyorum. @vonderplanitz |
[DHTUBE=for (int x=1;;x += 3)] 1 4 7 10 sayılarını elde ediyoruz. fakat sürekli gidiyor bir yerde dur dememiz gerekli :) o nasıl olacak? böyle olunca senin istedi //kocaman code blogunun içinde yazmaya ne gerek var! DH ekibi daha güzel BBCODE yapabilirsin. her işe yönelik. |
@vonderplanitz aklımda bir şey var. işte onun için bunları yazdım. For'da istediklerimi tam yapamıyorum. Benin istediğin şeyin sadece bir kısmını ancak karşıladı. Böyle onunca daha kısa oluyor. araştırmaya devam. Ben biraz daha kitap okuyayım :) Daha sadece yazabilmek için bu gerekli! Hep ingilizceyi okumakta hüsran yaşadığım için zor geliyordu.biraz acıdan zevk alır olmak lazım. :) cout << n; n != numara ? cout << " + " : cout << ""; yani bu kısım için. |
Herbert Schildt - The Complete C++ Reference kitabı kraldır, onu tavsiye ederim. C++ 'ı en tutarlı anlatan kişi o. O kitaptan bakarak bu probleme tekrar bir el at; çözüm bekliyoruz. |
|
Güzel fakat num iterasyonu da özyineleme tarzı olmalı. Sen sadece rep iterasyonunu özyineleme yaptın. Sorunun amacı zaten her ikisini de özyineleme tarzında yapabilmek. main'i return'sız ve giriş rutini olmadan fonksiyonu 5 ve 3 ile kısaca cağırmak kısa ve güzel durmuş, benim çözümü de aynı sekilde düzenledim. |
|
özyinelemeyi numara yerine tekrar (rep) iterasyonuna uyguladın bu sefer. Aynı anda her ikisine özyineleme uygulanmalı. Benim çözüm konuya açıklık katacaktır. #include <iostream> alimmm78'in çözümü de doğru şekilde 2 özyineleme uyguluyordu fakat toplamı mat formülle buluyordu; onu da özyineleme değişkenleri ile bulması daha doğru olurdu cunku o da özyineleme sorusunun bir parçası. Senin kod da toplamı (sum) iterasyon içinde hesapladığın için int sum = 0 şeklinde tanımlamak zorunda kalıyorsun; özyineleme tarzında ona gerek de kalmıyor. Bu sorudan sonra kapsamı daha geniş 2 soru daha göndereceğim. Bir sonraki soru sadece özyineleme ile çözülebilecek türde olacak. |
Bir fonksiyonu iki farklı amaçla ve her ikisinde de recursive kullanmaya çalışıyorsun, biraz zorlama geldi bana. Hackerrank gibi bir yerin sorusu mu bu? oralar "zihni sinir"e kaçıyor biraz |
Soru Hackerrank vs den değil. Çok kalite bir soru değil fakat cok kötü bir soru da değil. Amaç recursive programlamaya ısınmak ki onun da nihai amacı yapay zeka/YZ uygulamalarında kullanılan bazı algoritmalara yatkınlık kazanmak. 1-2 alıştırma sorusu daha sorduktan sonra olayı YZ algoritmalarına bağlamayı düşünüyorum (vaktim ve şartlar uygun olursa) Şimdi şöyle bir alıştırma sorusu var: Polinom Faktöryel < Resime gitmek için tıklayın > (m¿ deki ters soru işareti polinom faktöryelin temsili simgesi. Normal faktöryel gösterimi m! ise polinom faktöryel gösterimi m¿ Bunun haricinde bir anlamı yok) m=5 için örnek çıktı:
Bu soruyu özyinelemeli olarak çözünüz. Ben çözdüm :) |
Bu daha mantıklı ve kolay, python ile yaptım:
|
Özyinelemeli tarzda fonksiyonu yazdım. Başkaları nasıl yazacak, onu tartışma ve egzeersiz amaçlıdır konu. Egzersiz yapmak isteyenler , bu fonksiyonu özyinelemeli tarzda yazabilir mi :)
DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.
Üye Ol Şimdi DeğilÜye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.