gpt4 book ai didi

c++ - "5"有什么问题?纸上的一切都很好

转载 作者:太空宇宙 更新时间:2023-11-04 14:56:00 25 4
gpt4 key购买 nike

<分区>

这是我们应该用 C++ 解决的问题:

GCD ( 2m , 2n )         =  2 * GCD( m , n )
GCD ( 2m , 2n+1 ) = GCD ( m , 2n+1 )
GCD ( 2m+1, 2n+1 ) = GCD ( n-m , 2m+1 ) (m<n)
GCD ( m , m ) = m

这是我写的函数:

int GCD(int n1, int n2)
{
bool n1Zoj, n2Zoj;
n1Zoj = (n1%2 == 0);
n2Zoj = (n2%2 == 0);

if(n1Zoj && n2Zoj)
return 2 * GCD(n1/2, n2/2);

if(n1Zoj && !n2Zoj)
return GCD(n1/2, n2);

if(!n1Zoj && !n2Zoj)
return GCD((n2-n1)/2, n1);

if(n1 == n2)
return n1;
}

(*“Zoj”在我的语言(波斯语)中的意思是“Even”)

当我将 5 作为第二个参数传递时,程序崩溃并打印此消息:

Segmentation fault (core dumped)

退出代码是 139。我在使用 g++ 作为编译器的 ubuntu 12.04 上使用 Code::Blocks。

更新:程序崩溃 5,10,15,20,25,...

更新:我认为函数的正确形式是:

int GCD(int n1, int n2)
{
if (n1 > n2)
std::swap(n1, n2);

//std::cout<<"GCD is called with params: "<<n1<<" & "<<n2<<std::endl;
bool n1Zoj, n2Zoj;

n1Zoj = (n1%2 == 0);
n2Zoj = (n2%2 == 0);

if(n1 == n2)
return n1;

if(n1Zoj && n2Zoj)
return 2 * GCD(n1/2, n2/2);

if(n1Zoj && !n2Zoj)
return GCD(n1/2, n2);

if(!n1Zoj && n2Zoj)
return GCD(n2/2, n1);

if(!n1Zoj && !n2Zoj)
return GCD((n2-n1)/2, n1);
}

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com