运用递归方法python角谷猜想计算变换次数
要求:称为角谷猜想:对于一个正整数n,若为偶数则除以2,若为奇数则乘以3加1,得到一个新的数后按照之前的两条规则继续演算,若干次后得到的结果必然为1。输入任一正整数,输出演算过程。然后计算其计算运行次数。角谷猜想递归其实并不更加简洁,因此用来作为递归理解。闭包的基本条件:1 在一个外函数中定义了一个内函数。2 内函数里运用了外函数的临时变量。3 并且外函数的返回值是内函数的引用。另外:外部函数的变
要求:称为角谷猜想:对于一个正整数n,若为偶数则除以2,若为奇数则乘以3加1,得到一个新的数后按照之前的两条规则继续演算,若干次后得到的结果必然为1。输入任一正整数,输出演算过程。然后计算其计算运行次数。
角谷猜想递归其实并不更加简洁,因此用来作为递归理解。
闭包的基本条件:
1 在一个外函数中定义了一个内函数。
2 内函数里运用了外函数的临时变量。
3 并且外函数的返回值是内函数的引用。
另外:外部函数的变量,相当于绑定在了内部函数中,就是有一部分内存会被一直占用来存储外部函数的变量。所以内部函数可以总是访问外部函数的变量和声名。
详细说明请看其他的文章
运用闭包的角谷猜想递归代码:
#角谷猜想
count,end = 0,0
def process(n):#整数输入
if n == 1:#基例,结束条件
return#有无返回值都可以,因为递归不参与计算,无值也不影响。
def process2():
global count,end#计数器
if n%2 == 1:
count += 1
end = n*3 + 1
print(end)#输出运行结果
process(end)#调用外部函数
elif n%2 == 0:
end = n//2#输入要求整数,所有用整除
count += 1
print(end)#输出运行结果
process(end)#调用外部函数
return count
return process2()
print("运行{}次".format(process(int(input("请输入数字")))))
递归是抽象了计算的过程,要深究每一步是比较复杂的,如果觉得还不能理解这个代码,可以先从阶乘的递归一些基础的递归进行理解。
运行结果:请输入数字:20
10
5
16
8
4
2
1
运行7次
可见程序符合角谷猜想,并进行了7次变换
不运用闭包的角谷猜想递归代码:
#角谷猜想
count,end = 0,0
def process(n):
global count,end
if n == 1:
return 1#有无返回值都可以,因为递归不参与计算,无值也不影响。
elif n%2 == 1:
count += 1
end = n*3 + 1
print(end)#看最后数是否为1
process(end)
elif n%2 == 0:
count += 1
end = n//2#整除,因为要求输入整数,即进行整数的运算。
print(end)#看最后数是否为1
process(end)
return count
print("运行{}次".format(process(int(input("请输入数字")))))
使用基础方法的代码:
n = int(input("请输入数字:"))
count = 0
while n != 1:
if n % 2 == 0:
count += 1
end = n / 2
print("%d" %(end))
n = end
else:
count += 1
end = n * 3 + 1
print("%d" %(end))
n = end
print(f"运行{count}次")
这就是角谷猜想的三种验证方法。
编译环境为vscode最新版
更多推荐
所有评论(0)