【发布时间】:2021-02-23 21:47:56
【问题描述】:
我正在开发一些用于学习目的的基本程序。努力在这种递归函数中找出逻辑。直方图函数中的“循环”如何工作?是否有可能摆脱它并使其仅成为主要功能?任何信息都值得赞赏。 任务是用给定的整数创建水平直方图。
#include <stdio.h>
#include <string.h>
void histogram(int numbers[], int length, int n) {
int finished = 1;
for(int i = 0; i < length; i++){
if(numbers[i] - n > 0)
finished = 0;}
if(finished)
return;
else {
histogram(numbers, length, n +1);
int counter = 0;
for(int i = 0; i < length; i++) {
int number = numbers[i] -n;
if(number > 0)
printf("* ");
else
printf(" ");
}
printf("\n");
}
}
int main(void) {
int numbers[] = {1, 3, 1};
int length = sizeof(numbers) / sizeof(int);
histogram(numbers, length,0);
return 0;
}
【问题讨论】:
-
您是否尝试过在纸上或调试器中单步执行程序?
-
histogram中有 2 个循环。你问的是哪一个? -
虽然在 C 中递归调用
main是合法的,但我建议不要这样做。 -
理解递归的关键是先理解递归(© koans passim)
-
sizeof(numbers) / sizeof(int)是迈向好代码的好一步。考虑删除所有 type 引用:sizeof numbers / sizeof numbers[0]