gpt4 book ai didi

C 递归 Collat​​z 猜想,直到值小于原始整数

转载 作者:行者123 更新时间:2023-11-30 15:05:54 25 4
gpt4 key购买 nike

我正在编写一个递归方法来计算正整数序列的 collat​​z 猜想。但是,我需要在值小于或等于原始值时停止计算,而不是在值达到 1 时停止计算。我不知道应该在 if 语句中添加什么条件。

int collatz (int n) {
printf("%d%s", n, " ");

if(n > collatz(n)) { // here I would get an error saying all path leads to the method itself
return n;
}
else {
if(n % 2 == 0) {
return collatz(n / 2);
}
else {
return collatz((3 * n) + 1);
}
}
}

最佳答案

我又使用了两个参数:

  1. startValue,通过递归调用传递初始值
  2. notFirstTime,检查是否是第一次调用(而不是递归调用)。在这种情况下,允许值 n <= startValue。

代码如下:

int collatz (int startValue, int n, int notFirstTime){
printf("%d%s ", n, " ");

if(n <= startValue && !notFirstTime)
{ // here I would get an error saying all path
//leads to the method itself
return n;
}
else
{
if ( n%2==0 )
{
collatz(startValue, n/2, 0);
}
else
{
collatz(startValue, (3*n)+1, 0);
}
}
}

int main() {
int x = 27;
int firstTime = 1;
int test = collatz(x,x, firstTime);
printf("\nLast value: %d\n", test);
return 0;
}

请注意,我从递归调用中删除了两个 return 语句。

关于C 递归 Collat​​z 猜想,直到值小于原始整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39483787/

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