将迭代算法转换为递归算法

Converting an iterative algorithm to a recursive one

我写了下面的程序:

#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()
{
    static unsigned int y = 0;
    printf("y = %d", y);
    y+1;
}

我把它变成:

void printValue(int y)
{
    y++;
    printf("y = %d\n", y);
    printValue(y);
}

已编译 -> His function

已编译 -> Recursive function

看到相同的输出,我只是做了 OP 想要的。

个人我会在没有递归函数的情况下避免无限循环:

for (i=0; i<n; i++)
{
      printValue(y);
}

void printValue(int y){
     printf("y = %d\n", y);
}
#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);
void repeat_upto(int init_value, int end_value, int incremental,
                 void (*func)(int)){
    if(incremental < 0 ? init_value >= end_value : init_value <= end_value){
        func(init_value);
        repeat_upto(init_value + incremental, end_value, incremental, func);
    }
}

int main (void){
    repeat_upto(0, 100-1, +1, printValue);
    return 0;
}

void printValue(int v){
    printf("%d\n", v);
}

#include <stdio.h>

void printValue(int v, int end_value){
    if(v < end_value){
        printf("%d\n", v);
        printValue(v+1, end_value);
    }
}

int main (void){
    printValue(0, 100);
    return 0;
}

这与 BLUEPIXY 的回答几乎相同,因为我认为这是直接的解决方案,但由于您对函数指针感到困惑,我将其删除。

#include <stdio.h>
#include <stdlib.h>

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

void
recursiveFunction(int counter)
{
    printValue();
    if (--counter == 0)
        return;
    recursiveFunction(counter);
}

int
main()
{
    recursiveFunction(100);
    return 0;
}

或者你可能是这个意思

#include <stdio.h>
#include <stdlib.h>

void
printValue(int y)
{
    if (++y > 100)
        return;
    printf("%d\n", y);
    printValue(y);
}

int
main()
{
    printValue(0);
    return 0;
}