通过一个用递归%2的方法,写两个代码,这两个代码输出的顺序(结果)正好相反,研究其原理有助于理解递归思路。
有两个递归函数来模仿Bin()函数:
def Binary(x):
result = ''
if x:
result = Binary(x // 2)
return result + str(x % 2)
else:
return result
def Binary2(x):
result = ''
if x:
result += str(x % 2)
return result + Binary(x // 2)
else:
return result
print(Binary(62))
print(Binary2(62))
print(bin(62))
输出的结果如下:
111110
011111
0b111110
我们用思路图,总结一下递归的方式:
数学对逆向递归过程进行证明:
只考虑三次递归过程:
result = f(x//2)=f(x//4)=f(x//8)= ''
f(x) = f(x//2) + x%2...............1
f(x//2) = f(x//4) + (x//2)%2.....2
f(x//4) = f(x//8) + (x//4)%2.....3
由1,2,3得,
f(x) = f(x//8) + (x//4)%2 + (x//2)%2 + x%2
而f(x//8) = result = ''
所以,
f(x) = '' + (x//4)%2 + (x//2)%2 + x%2
所以两者输出了相反的结果,而我们需要的结果是第一种逆向递归。
作为一个初学者,我认为对递归的方向的理解尤为重要。
希望能对其他受苦与递归的人提供一些思路。