【发布时间】:2022-10-22 04:40:20
【问题描述】:
因此,我试图从 CS50 课程中找出我所看到的一些 Tideman 问题的解决方案。我的疑问如下>>
我们有这个代码>>
// Test for cycle by checking arrow coming into each candidate
bool cycle(int end, int cycle_start)
{
// Return true if there is a cycle created (Recursion base case)
if (end == cycle_start)
{
return true;
}
// Loop through candidates (Recursive case)
for (int i = 0; i < candidate_count; i++)
{
if (locked[end][i])
{
if (cycle(i, cycle_start))
{
return true;
}
}
}
return false;
}
在这种情况下就行了>>
if (locked[end][i])
我的理解是这意味着locked[end][i] 是真的,这意味着那里有一个箭头。我想我明白了。
但我记得 Locked 数组 Locked[max][max] 的值为 false 作为每对锁定的值。
考虑到所有对都是“假的”,那么我的理解是这里的条件>>
if (locked[end][i])
永远不会遇到,因为在通过检查循环功能之前,一切都是错误的。
我错了吗?如果是这样,请帮助我了解递归函数是如何工作的。
谢谢你。
【问题讨论】:
标签: cs50