假设您得到以下数字:
4 4 1 5 2 6 3 4 2 0
该数字带有一个正方形,指示您当前的位置。您可以通过跳动站立的数字所指示的空格数来向左或向右移动。因此,如果您站在4杆上,则可以向左跳4个空格,也可以向右跳4个空格。您不能跳过该行的任何一端。
例如,第一个数字(4)仅允许您向右跳,因为左边没有数字可以跳至。
目标:您想在直线的远端(右侧)达到0。您还可以保证只有一个零,再次位于最右边。
您将要编写一个递归函数,该函数将返回整数1(对于可求解)或0(对于不可求解),指示您是否能够获得最右边的0。
答案 0 :(得分:0)
您将要编写一个递归函数,该函数将返回整数1(对于可求解)或0(对于不可求解),…
Recursion (computer science) - Wikipedia是一个好的开始:
递归函数定义具有一个或多个基本案例,表示该函数对其琐碎地产生结果的输入(无重复),以及一个或多个递归案例 i>,表示程序重复发生的输入(调用自身)。
基本情况是:
递归的情况是:
简短的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)
。