【问题标题】:Having problems understanding recursive functions [duplicate]在理解递归函数时遇到问题[重复]
【发布时间】:2016-06-14 19:02:58
【问题描述】:

我仍然是一个尝试掌握递归的相对较新的程序员。我查看了各种关于它们如何工作的在线教程,它们看起来很容易理解。但是当我偶然发现这个问题时,我很难理解程序是如何运行的。

#include <stdlib.h>
#include <stdio.h>

void hanoi(int n);

int main (int argc, char *argv[]) {
    hanoi(2);
}


void hanoi( int n ) {
    printf("\n\n--------!n-------: %d\n\n", n);
    if ( n > 0 ) {
        hanoi ( n - 1 );
        printf("\n\n--------#n---------: %d\n\n", n);
        hanoi ( n - 1 );
        printf("\n\n-------$n---------: %d\n\n", n);
    }
}

输出

!n: 2

!n: 1

!n: 0

#n: 1

!n: 0

$n: 1

#n: 2

!n: 1

!n: 0

#n: 1

!n: 0

$n: 1

$n: 2

所以我希望有人可以逐步完成这个程序并帮助我了解递归的真正工作原理。

编辑:-对照片感到抱歉-

【问题讨论】:

  • 请编辑您的问题,不要使用图片作为代码。将您的代码添加到问题中
  • 请勿将代码发布为图片。相反,创建一个视频演练并将其上传到 Youtube。哦不,等等。

标签: c recursion


【解决方案1】:

您想将 n 块从引脚 1 移动到引脚 3。

你可以这样做:

  1. 将除底部块之外的所有块移动到引脚 2。这需要多次移动,相当于解决 n-1 块的 Hanois 塔,因此调用 hanoi(n-1)

  2. 将底部块移动到引脚 3。这是一次移动。

  3. 最后将剩余的块从针脚 2 移动到针脚 3。这需要多次移动,相当于为n-1 块解决河塔,因此第二次调用hanoi(n-1)

    李>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-13
    • 2012-11-12
    • 1970-01-01
    • 1970-01-01
    • 2022-11-25
    • 2022-01-07
    相关资源
    最近更新 更多