常见的一个经典问题:
给定一个方格子。另左上角坐标为(0,0),右下角坐标为(M,N),从左上角开始每次只能向右走或者向下走,最后达到右下角的位置。求一共有多少种不同的路径?
数学的想法
对于计算这个问题的时候,可以去思考,不管怎样,从上往下从左往右,一共要走M+N步,那么,只需要去考虑,哪几步朝下,哪几步向右就可以了。运用排列得公式直接写作 C M + N M C_{M+N}^{M} CM+NM或者是 C M + N N C_{M+N}^{N} CM+NN即可。
代码
运用代码来写递归的方式同样可以计算
python代码如下 代码片
:
import numpy as np
import pandas as pd
def get_num(i):
k = input('请输入{},若希望终止请输入 \'False\' :'.format(i))
k = k.upper()
if k == 'FALSE':
return False
try:
k=float(k)
except ValueError as reason:
print('输入有误,请输入整数值:')
return get_num(i)
if k==int(k):
k=int(k)
else:
print('输入有误,您输入的数值为浮点数,请输入整数值')
return get_num(i)
return k
def Coordinate_acqu():
coordinate_name=[['begin_point_X','begin_point_Y'],['end_point_X','end_point_Y']]
coordinate = np.zeros((2,2)).tolist()
for point in range(len(coordinate_name)):
for pointk in range(len(coordinate_name[point])):
coordinate[point][pointk] = get_num(coordinate_name[point][pointk])
if coordinate[point][pointk] is False:
return False
return coordinate
def num_count(begin_point,end_point): #其实也就只有这个地方的是主要的内容,其他都没什么用
'''
func:迭代计算不同路径的总数
paramter:
begin_point:起始坐标
end_point:终止坐标
return:路径的总数
'''
if begin_point[0]>end_point[0] or begin_point[1]>end_point[1]:
return 0
if begin_point==end_point:
return 1
else:
return num_count([begin_point[0]+1,begin_point[1]],end_point)+ \
num_count([begin_point[0],begin_point[1]+1],end_point)
if __name__=='__main__':
point = Coordinate_acqu()
if point is False:
print('输入的内容有误,程序已经终止')
else:
[begin_point,end_point]= point
a ='='*50
print('\n',a,end='\n\n')
print('输入的初始坐标为:{}\n输入的终止坐标为:{}'.format(begin_point,end_point))
num = num_count(begin_point,end_point)
print('所走的总的不同路径共有 {} 种'.format(num))