河内塔递归与移动索引环的移动功能

时间:2019-01-27 22:11:03

标签: algorithm recursion towers-of-hanoi

我遇到了河内塔递归问题。我得到了一个带有2个参数的move函数:

  • price = a.find('span').text(环的索引:import csv ; import requests from bs4 import BeautifulSoup outfile = open('pistonheads.csv','w', newline='') writer = csv.writer(outfile) writer.writerow(["Link", "Make", "Model", "Price", 'Images']) url = 'https://www.pistonheads.com/classifieds?Category=used-cars&Page=1&ResultsPerPage=100' get_url = requests.get(url) get_text = get_url.text soup = BeautifulSoup(get_text, 'html.parser') car_link = soup.find_all('div', 'listing-headline', 'price') for div in car_link: links = div.findAll('a') for a in links: link = ("https://www.pistonheads.com" + a['href']) make = (a['href'].split('/')[-4]) model = (a['href'].split('/')[-3]) price = a.find('span').text image_link = a.parent.parent.find('img')['src'] image = link + image_link writer.writerow([link, make, model, price, image]) print(link, make, model, price, image) outfile.close() -> j从下到上)和
  • 职位。

我找到了一种无需使用此函数即可解决递归问题的方法,但是当我需要使用它时会陷入困境。实际上,我不知道如何有效地更改我的1变量。

n

我发现了j进化的一些模式:

例如3个环:

moveTower(n, position1, position2):
    if n > 1:
        moveTower(n-1, position1, aux)
        move(j, position2) """ That's where i'm stuck """
        moveTower(n-1, aux, position2)
    else:
        move(j, position2)

1 个答案:

答案 0 :(得分:1)

我认为计算j的最简单方法是注意到它总是与position1position2不同。因此,您可以编写嵌套的if/else,也可以将其显式传递为第三个参数,或者,如果您需要一些巧妙的技巧,请使用:

j = 6 - position1 - position2

这里的想法是6 = 1 + 2 + 3,因此将j计算为不是(1,2,3)position1的{​​{1}}中的一个。