Algorithm 迭代算法的递归等价物

Algorithm 迭代算法的递归等价物,algorithm,recursion,Algorithm,Recursion,由于用户BLUEPIXY的原因,Code2应该表示与Code1等价的递归算法。然而,我不能完全确定Code2是否确实是递归的:有这样的条件可以吗 if(n>0){ func(); times(--n, func); } 你不应该有一个明确的基本情况吗?请你澄清一下好吗 代码1: #include <stdio.h> void printValue(); int main (){ int n = 100

由于用户BLUEPIXY的原因,Code2应该表示与Code1等价的递归算法。然而,我不能完全确定Code2是否确实是递归的:有这样的条件可以吗

if(n>0){
            func();
            times(--n, func);
        }
你不应该有一个明确的基本情况吗?请你澄清一下好吗


代码1:

#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;
}
#包括
void printValue();
int main(){
int n=100;
int i;
对于(i=0;i0){
func();
次数(--n,func);
}
}
内部主(空){
int n=100;
次数(n,打印值);
返回0;
}
void打印值(void){
静态无符号整数y=0;
printf(“y=%d\n”,y);
y+=1;
}

假设代码1是这样的(我刚刚创建了一个新函数来进行迭代,其他什么都没有)

#包括
void printValue();
整数倍(整数n,无效(*func)(无效)){

对于(int i=0;iCode看起来不错,递归看起来不错什么意思
定义良好的基本情况
?您是否尝试运行这两种解决方案来说服自己输出是相同的?@John3136我看到输出是相同的,但我不完全确定code2是递归算法。您能解释一下为什么它是递归的吗?@mathleener:调用自身的函数显然是递归的。
times
函数调用
times
函数,所以…@mathleer:如果它调用自身,它是递归的。句点。总是。不管其余的代码是什么。这个条件应该是等价的。Op说
但是,我不能完全确定Code2s确实是递归的,我为code2提供了一个基本/迭代的例子。我还稍微简化了code1,以强调
times
函数在code2中是递归的,而不是code1。
#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;
}
#include <stdio.h>
void printValue();
int times(int n, void (*func)(void)) {
    for(int i=0; i<n; ++i)
        func();
}
int main (){
   int n = 100;
   int i;
   times(n, printValue);
}

void printValue(){
    static unsigned int y = 0;
    printf("y = %d", y);
    y+=1;
}