Cpp fonksiyon soru

Arkadaşlar şu kodu calistirdigimda neden 89 geliyor

#include <iostream>

using namespace std;
int f(int n)
{

}
int main()
{  
	cout << "factorial of 5 is "<< f(0);
	return 0;
}

f fonksiyonunun içi boş. Bende farklı bir değer dönüyor.

Şöyle yapabilirsiniz:

#include <iostream>

using namespace std;
int f(int n)
{
    int result = 1;
    for(int i = 1; i < n + 1; i++)
    {
        result *= i;
    }
    return result;
    
}
int main()
{  
	cout << "factorial of 5 is " << f(5) << "\n";
	return 0;
}

Bu da öz-yinelemeli hali.

#include <iostream>

using namespace std;
int f(int n, int k = 1)
{
    if (n == 1)
    {
        return k;
    }
    else {      
        return f(n=n - 1, k=k * n);
    }
}
int main()
{  
	cout << "factorial of 5 is " << f(5) << "\n";
	return 0;
}

Niye gelmesin? Başka bir şey döndürmesini söylememişsiniz.

1 Beğeni

Undefined behavior bolgesine girmissin. O noktadan sonra her sey olabilir, 89 gelmesi de bu sonsuz olasiliklar dahilinde.

Kodunu butun warning’leri acarak derlemeni tavsiye ediyorum.

3 Beğeni

birde size zahmet bir sorum daha var … (diyip beklemicem direk sorucam :smile:)
şimdi fibonacci sayılarını ekrana basma işleminde

#include <iostream>
using namespace std;



void  fib(int n){

    int a=1;int b=1;
    cout << a;
    for (int x=1;x<n;x++){

        a=b;
        b=a+b;
        cout << a;


    }

}






ile

def fib(n):
    a,b=1,1
    print(a);print(b)
    for i in range(1,n+1):
         a,b=b,a+b
         print(b)

ekrana bastığı sayılar farklı ama neden?

1 Beğeni

mesela birincisinde 1 1 2 4 8 16 32 64 128 256
ama ikincisinde 1 1 2 3 5 8 13 21 34 55 89 144
niyeee aynı mantık değil mi değilse nedenini açıklarmısınız lütfen!!!

Python değişkenlerin değerini takas ederken yedekte geçici bir değişken oluşturuyor. Sağ taraftaki a ifadenin tamamı bitene kadar değişmediği için bu kod istediğiniz gibi çalışıyor. Ayrıca iki kodun eşdeğer olmadığını biraz incelerseniz anlarsınız zaten, ilk kod b’yi sürekli ikiye katlıyor. a ve b’nin değiştirildiği yeri C++'dan kopyalayıp Python’a yapıştırırsanız orada da benzer bir sonuç alırsınız.

?

burayı tam anlamadım galiba yapabiliyorsanız biraz daha açıklayabilir misiniz?

a,b=1,1
#ben
a,b=b,a+b # yi 
a=b
b=a+b#diye zannediyordum

@EkremDincel

sanırım anladım mesela şöyle bir örnek vereyim

a,b=5,6
a,b=b,a+b
print(a,b)
a,b=5,6
a=b
b=a+b
print(a,b)

bu ifade de ilk kısımda önce atanacak değerleri hazırlıyor
mesela atanacak değerler 5,6+5 oluyor
ama alttakinde ise
önce
a=b yani ikiside 6 ve sonra ikisinide topluyor yani mantıken
b=6+6 olmuş oluyor ikiye katlıyor
doğru muyum?

mesela bu çalıştı cpp de

#include <iostream>
using namespace std;



void  fib(int n){

    int a=1;int b=1;int c;
    cout << a << b;
    for (int x=1;x<n;x++){
        c=a+b;

        a=b;
        b=c;

        cout << b;


    }

}
int main()
{
    fib(10);
    return 0;
}

sağol’un çok yardımcı oldunuz @EkremDincel :yellow_heart:

Evet, sizin C++'de yaptığınızı değişkenleri takas ederken Python kendi yapıyor.

1 Beğeni

C++'ta , operatoru islemleri sekanslamak (art arda yapmak) icin kullaniliyor. , yerine ; + enter koyarsaniz ne yaptigini daha iyi anlayabilirsiniz.