相关疑难解决方法(0)

递归算法如何适用于河内塔?

这是我解释递归的书中的代码.问题是我不明白该计划采取的步骤:

var hanoi = function(disc,src,aux,dst) {
    if (disc > 0) {
        hanoi(disc - 1,src,dst,aux);
        document.write("Move disc " + disc + " from " + src + " to " + dst + "<br />");
        hanoi(disc - 1,aux,src,dst);
    }
};

hanoi(3,"src","aux","dst");
Run Code Online (Sandbox Code Playgroud)

这是输出的读取方式:

Move disc 1 from src to dst
Move disc 2 from src to aux
Move disc 1 from dst to aux
Move disc 3 from src to dst
Move disc 1 from aux to src
Move disc 2 from …
Run Code Online (Sandbox Code Playgroud)

javascript recursion towers-of-hanoi

10
推荐指数
1
解决办法
9359
查看次数

河内Python之塔-了解递归

我对Python完全陌生,目前正在阅读有关河内塔和递归的教程。我以为我理解递归,直到他们给出了这个例子:

def moveTower(height,fromPole, toPole, withPole):
    if height >= 1:
        moveTower(height-1,fromPole,withPole,toPole)
        moveDisk(fromPole,toPole)
        moveTower(height-1,withPole,toPole,fromPole)
    #print(withPole)

def moveDisk(fp,tp):
    print("moving disk from",fp,"to",tp)


moveTower(3,"A","B","C")
Run Code Online (Sandbox Code Playgroud)

它用3张光盘打印出解决河内塔问题的正确举动:从A到B的移动磁盘从A到C的移动磁盘从B到C的移动磁盘从A到B的移动磁盘从C到A的移动磁盘从C的移动磁盘到B将磁盘从A移到B

我的问题是,它是怎么做到的?有人可以遍历代码行,以便我了解它如何打印正确的动作吗?我主要是混淆怎样的价值fp,并tp可以从改变A到B到C。抱歉,这是一个广泛的问题!任何帮助将不胜感激!

python algorithm recursion towers-of-hanoi

5
推荐指数
1
解决办法
2万
查看次数

无法理解我的讲师递归算法的河内塔

算法如下:

Algorithm move(k, from, to, spare)
if k >0 then
move(k?1, from, spare, to)
printf (”move top disc from %d to %d\n”,
from, to)
move(k?1, spare, to, from)
Run Code Online (Sandbox Code Playgroud)

k是磁盘的数量(http://en.wikipedia.org/wiki/Tower_of_Hanoi).我理解递归,我只是不明白这是如何工作的,任何人都可以理解这一点吗?

抱歉我的描述中含糊不清,只是我对发生的事情的理解也很模糊 - 我不知道printf线在做什么似乎对整个功能至关重要.

recursion towers-of-hanoi

4
推荐指数
1
解决办法
407
查看次数

河内递归算法塔

我在理解这个河内塔递归算法时遇到了问题:

public class MainClass {
  public static void main(String[] args) {
    int nDisks = 3;
    doTowers(nDisks, 'A', 'B', 'C');
  }

  public static void doTowers(int topN, char from, char inter, char to) {
    if (topN == 1){
      System.out.println("Disk 1 from " + from + " to " + to);
    }else {
      doTowers(topN - 1, from, to, inter);
      System.out.println("Disk " + topN + " from " + from + " to " + to);
      doTowers(topN - 1, inter, from, to);
    }
  } …
Run Code Online (Sandbox Code Playgroud)

java algorithm recursion

2
推荐指数
1
解决办法
1万
查看次数

河内问题塔

嗨大家我在河内的塔上遇到了一个问题:
我们给了一堆交替颜色的圆柱体交替堆叠在一起.
我的工作是将相同颜色的两个堆栈分开,
我可以使用递归为常规的河内塔写代码(算法),但我无法弄清楚这一部分.有人可以帮忙吗?
常规河内问题的代码:

#include<iostream>

using namespace std;
int count=0;

void hanoi(char a,char b,char c,int x)
{
  if(x>1)
  {
    hanoi(a,c,b,x-1);
    hanoi(a,b,c,1);
    hanoi(c,b,a,x-1);
  }
  else
  {
    cout<<"Move a Disk from "<<a<<" to "<<b<<endl; count++;  
  }
}

int main()
{
  int n;
  cout<<"Enter the height of stack";
  cin>>n;
  hanoi('A','B','C',n);
  cout<<"\nNo. of changes done:"<<count;

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++

0
推荐指数
1
解决办法
2695
查看次数

-1
推荐指数
1
解决办法
3301
查看次数

标签 统计

recursion ×5

towers-of-hanoi ×4

algorithm ×2

c++ ×1

java ×1

javascript ×1

python ×1