Merhaba, "öz yinelemeli" tanımının temel anlamı bir fonksiyonun kendisini çağırması diyebiliriz.
Problem kendisi ile aynı daha küçük problemlerin birleşmesinden oluşuyorsa öz yinelemeli (Recursive) şeklinde oluşturabilirsin.
Öz yinelemeli kavramını şu şekilde anlatırsak daha yararlı olacaktır. Örneğin 1 ile 30 arasındaki sayıları tanımlarken 1 ile 29 arasındaki sayıların toplamı, artı 30 diyebiliriz. Aynı şekilde 1 ile 28 arasındaki sayıların toplamı, artı 29 diyebiliriz, bu şekilde fark edeceğin üzere aynı problem daha küçük şekilde karşımıza çıkıyor.
Önemli bir konu Recursive functions'lar da küçükten büyüğe işlem yapman gerekir, bu şekilde küçük problemler birleşerek büyük problemin sonucunu oluşturur.
Senin probleminde ise durum şu şekilde olacaktır, En büyük basamaktan en küçük basamağa kadar parçalaman gerekiyor, sonrasında fonksiyonun return kısmında basamakta bulunan sayı çarpı basamak sayısı şeklinde return yapabilirsin.
Teşekkürler.
Hocam recursive mantığıyla kabul oluyorsa aşağıdaki gibi bir örnek yazdım sizin için( math.h kütüphanesi kullandım ).
Sizin tek yapmanız gereken long long haline çevirmek çünkü ben int kullandığım için 19 basamaklı bir sayıyı hesaplayamıyor.
digits( 84012100, 8 ); buradaki 8 rakamını 19 yaparsanız 19 basamaklı sayıları hesaplayabilirsiniz. Ama dediğim gibi önce long haline çevirmeniz ve 19 basamaklı bir sayıyı depolamanız gerekmektedir. Tekrar bir sorunuz olursa yardımcı olabilirim. Kolay gelsin.
#include<iostream>
#include<conio.h>
#include<math.h>
void digits( int n, int digit ){
if( digit != -1 ){
if( n / (int)pow(10,digit) > 0 ){
printf("%d * %d", n/(int)pow(10,digit), (int)pow(10,digit));
if(n % (int)pow(10,digit) != 0) printf(" + ");
digits( n % (int)pow(10,digit), digit - 1 );
}else{
digits( n, digit - 1 );
}
}
}
int main(){
digits( 84012100, 8 );
getch();
}
Teşekkürler fakat hocam math.h kütüphanesini kabul etmiyor sadece iostream ve conio istiyor.
Hocam string olarak olursa bir örnekte benden
void ccc(char *p)
{
char ct[20]="0000000000000000000";
printf(" %c * 1%s",p[0],ct+(20-strlen(p)));
if(strlen(++p))
ccc(p);
}
int main()
{
ccc("7805");
getch();
}isterseniz 1000 basak girin ufak bir düzenlemeyle tamamdır.
Hocam elinize sağlık ancak sizin başta girdiğiniz değeri ayırıyor, nasıl kendi girdiğimiz rakamı ayıracak şekilde yazabiliriz.