gpt4 book ai didi

python - Collat​​z 猜想回文

转载 作者:太空宇宙 更新时间:2023-11-03 15:53:16 25 4
gpt4 key购买 nike

我应该编写代码,以 3 种不同的方式显示 collat​​z 猜想,以使用递归进行赋值。如果你不熟悉这个想法,猜想指出,如果你取任何起始值 n,如果 n 是偶数,则通过除 n/2 或乘 3n + 1(如果 n 是奇数),最终可以得到 1 的值。我应该以三种方式展示一个完整的算法:向前、向后和回文方式。

例如,正向时尚中的值 32 将显示:32 16 8 4 2 1

值 32 以倒序方式显示为 1 2 4 8 16 32

最后,回文时尚将显示 32 16 8 4 2 1 2 4 8 16 32

我已经能够完成前进和后退,但回文部分让我感到困惑。我所有的努力要么展现了前卫的时尚,要么让我陷入了无限循环。

*重要*这是棘手的部分:我不允许声明任何本地或全局变量来帮助我解决问题。我只被允许使用 Collat​​z 方法、循环和递归的原始参数。有人能解决这个骗子的问题吗?

def Collatz(number , algorithm):
if number == 1:
print number
return
if algorithm == 'F':
if number % 2 == 1:
print number
Collatz((3*number) + 1, algorithm)
if number % 2 == 0:
print number
Collatz((number/2),algorithm)
if algorithm == 'B':
if number % 2 == 1:
Collatz((3*number) + 1, algorithm)
print number
if number % 2 == 0:
Collatz((number/2),algorithm)
print number
**if( algorithm == 'P'):**

m = input( "Enter a positive integer value: " )
displaymode = '' # initialize to anything not F, B, P
while displaymode not in ['F', 'B', 'P']:
displaymode = raw_input( "Choose a display mode: F=forward, B=backward, P=palindrome: " )
Collatz( m, displaymode )
print

最佳答案

正如您所了解的,将 print 语句放在递归步骤之前会显示前向情况。将 print 语句放在递归步骤之后会显示向后的情况。现在,您将如何显示回文情况,即显示向前的步骤,然后显示向后的步骤......

要继续,您在前向情况中所做的就是不断调用 Collat​​z。每次执行此操作时,您都会获得序列中的下一个数字,并且会下降一级递归。您在向下之前打印出数字,因此您会得到如下所示的内容:

time -->

number=8
| \
| number=4
| | \
| | number=2
| | | \
| | | number=1 (base case)
| | | |
8 4 2 1 (what's printed out)

8 4 2 1 按顺序打印

在此图中,向下表示递归地更深一层。每个垂直切片显示当时正在运行代码的 Collat​​z 函数的值。

一旦到达基本情况,就返回并完成函数的执行。您“经过”的每个函数都会重新获得控制权并继续执行。在前面的例子中,什么也没发生。然而,在向后的情况下,您在递归后打印,导致发生类似的情况:

number=8                                  number=8
\ (n=8) waiting for Collatz... / |
number=4 number=4 |
\ (n=4) waiting... / | |
number=2 number=2 | |
\ ... / | | |
number=1 | | |
| | | |
1 2 4 8 (what's printed out)

1 2 4 8 按顺序打印

希望这能让人们更清楚地了解正在发生的事情以及如何进行回文版本。

关于python - Collat​​z 猜想回文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41051005/

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