gpt4 book ai didi

c# - C# 中的 Terras 猜想

转载 作者:行者123 更新时间:2023-11-30 20:51:56 24 4
gpt4 key购买 nike

我在生成 Terras 数字序列时遇到问题。

Terras formula

这是我失败的尝试:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Terras
{
class Program
{
public static int Terras(int n)
{
if (n <= 1)
{
int return_value = 1;
Console.WriteLine("Terras generated : " + return_value);

return return_value;
}
else
{
if ((n % 2) == 0)
{
// Even number
int return_value = 1 / 2 * Terras(n - 1);
Console.WriteLine("Terras generated : " + return_value);

return return_value;
}
else
{
// Odd number
int return_value = 1 / 2 * (3 * Terras(n - 1) + 1);
Console.WriteLine("Terras generated : " + return_value);

return return_value;
}
}
}
static void Main(string[] args)
{
Console.WriteLine("TERRAS1");
Terras(1); // should generate 1

Console.WriteLine("TERRAS2");
Terras(2); // should generate 2 1 ... instead of 1 and 0

Console.WriteLine("TERRAS5");
Terras(5); // should generate 5,8,4,2,1 not 1 0 0 0 0

Console.Read();
}
}
}

我做错了什么?

我知道递归的基础知识,但我不明白为什么这不起作用。

我观察到序列的第一个数字实际上是你传入的数字,后面的数字都是零。

最佳答案

1/2 * Terros(n - 1); 更改为 Terros(n - 1)/2;

还有 1/2 * (3 * Terros(n - 1) + 1);(3 * Terros(n - 1) + 1)/2;

1/2 * ... 只是 0 * ...int 数学。


[编辑]

递归是错误的并且公式是错误的。简单迭代

public static void Terros(int n) {
Console.Write("Terros generated :");
int t = n;
Console.Write(" " + t);
while (t > 1) {
int t_previous = t;
if (t_previous%2 == 0) {
t = t_previous/2;
}
else {
t = (3*t_previous+1)/2;
}
Console.Write(", " + t);
}
Console.WriteLine("");
}

“n 是偶数”应该是“t(下标 n-1) 是偶数”——与“n 是奇数”相同。

关于c# - C# 中的 Terras 猜想,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21287909/

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