Код2, благодаря пользователю BLUEPIXY, должен представлять собой рекурсивный алгоритм, эквивалентный Code1. Тем не менее, я не совсем уверен, что Code2 действительно рекурсивный: нормально ли иметь такое состояние?Рекурсивный эквивалент итеративного алгоритма
if(n>0){
func();
times(--n, func);
}
Разве у вас нет четко определенного основания? Пожалуйста, не могли бы вы уточнить?
Code1:
#include <stdio.h>
void printValue();
int main(){
int n = 100;
int i;
for (i=0; i<n; i+=1)
printValue();
}
void printValue(){
static unsigned int y = 0;
printf("y = %d", y);
y+=1;
}
Кодекса2:
#include <stdio.h>
void printValue(void);
void times(int n, void (*func)(void)){
if(n>0){
func();
times(--n, func);
}
}
int main (void){
int n = 100;
times(n, printValue);
return 0;
}
void printValue(void){
static unsigned int y = 0;
printf("y = %d\n", y);
y+=1;
}
Код выглядит хорошо, рекурсия выглядит нормально –
Что значит «хорошо определить базовый регистр»? вы попробовали запустить оба решения, чтобы убедить себя, что выход такой же? – John3136
@ John3136 Я вижу, что вывод тот же, но я не совсем уверен, что code2 является рекурсивным алгоритмом. Не могли бы вы объяснить, почему он рекурсивный? – mathlearner