假设您获得以下数字: 4 4 1 5 2 6 3 4 2 0
数字周围有方形,表示您当前所处的位置。您可以通过跳跃您所站号码所指示的空格数来向左或向右移动。因此,如果你站在4,你可以向左跳4个空格或向右跳4个空格。你不能跳过任何一端。
例如,第一个数字(4)只允许你向右跳,因为左边没有可以跳到的数字。
目标:你想要到达该线远端(右侧)的0。您也可以保证只有一个零,这也将是最右侧。
您将编写一个递归函数,该函数返回一个整数1(对于可解决的)或0(对于不可解决的),指示您是否能够到达最右边的0。
你要写一个递归函数,它返回一个整数1(对于可解决的)或0(对于不可解的),...
Recursion (computer science) - Wikipedia是一个好的开始:
递归函数定义具有一个或多个基本情况,意味着函数为其简单地生成结果(不重复)的输入,以及一个或多个递归情况,意味着程序重复的输入(调用自身) 。
基本案例是:
递归的情况是:
一个简短的C代码:
int hops[] = { 4, 4, 1, 5, 2, 6, 3, 4, 2, 0 };
#define DIM(a) sizeof a / sizeof *a
int solvable(int square)
{
if (square < 0 || DIM(hops) <= square) return 0; // past an end
if (hops[square] == 0) return 1; // got to the 0
return solvable(square+hops[square]) || solvable(square-hops[square]);
}
初始调用从索引为0的正方形开始:solvable(0)
。