String.charCodeAt()
如何将这段代码转换为递归函数?我在尝试使用此行的“基本案例”时遇到了麻烦
MouseReleased Event
因此,如果我到达一半,我可以打印中间线并返回它,但是它不起作用。此功能会打印由x制成的大X吗?
答案 0 :(得分:1)
要使用递归解决任务,可以使用以下模式:
您的任务是print_diagonals(width_of_the_square, current_line_number)
。
通过给它一个适当的名称并找出参数及其名称来定义此任务是解决此类问题的最重要部分。考虑print_diagonals
比考虑recursiveProblem
要容易得多,因为我给出的名称具有很多含义并能准确描述其目的。
此任务中的“平凡情况”可以是“在正方形的中间打印线”或“打印正方形的底线”。两者都可以工作,并且程序看起来相似。都尝试它们,然后比较生成的程序。这些程序的共同点是递归程序的典型特征。
使用此信息,您应该可以自己完成家庭作业。
答案 1 :(得分:-1)
我不明白为什么有人要递归。但这有效。
#include <stdio.h>
void recurse(int i, int j, int n){
printf(i==j || i+j+1==n ? "X" : " ");
if (++j == n) {
printf("\n");
if (++i == n)
return;
j=0;
}
recurse(i, j, n);
}
int main(){
int n;
printf("Enter width: ");
scanf("%d",&n);
recurse(0, 0, n);
return 0;
}
如果您会注意到,我使用if
运算符在printf
语句内向右移动了一个? :
块。
此外,请注意,每个单独的printf
都是从其自身的recurse
函数调用中调用的,该函数调用位于堆栈上所有其他函数调用的顶部。因此,如果堆栈有限且n
很大,则可能会耗尽堆栈并崩溃。这是递归函数应谨慎使用的原因之一。
或者,您可以将递增j
的循环放在递归函数中,而仅递归递增i
的循环。这样会减少很多堆栈。