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

C 将迭代算法转换为递归算法,c,algorithm,recursion,C,Algorithm,Recursion,我编写了以下程序: #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; } 如何重写算法使其递

我编写了以下程序:

#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);
}
已编译->

已编译->

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

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

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

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

这与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;
}

请自己尝试编写递归版本。你通过编程来学习编程,而不是让别人为你编程。如果你不能让它工作,回来,我们会帮助你理解你哪里出错了。好的,是的,巴尔马是对的。所以我不会写递归的。只需搜索和学习。不要一直指定y=0…你意识到这是他的第一个问题吗?来吧你做了一件疯狂的事你怎么停止递归你做不到!!哈哈,在这个问题上比我想象的要好得多。。。我本来打算对所有无法阻止自己回答的人进行全面投票。@mathlearner 1我被重写了代码中迭代的一部分是for-loop的一部分。2-1在评论中,有人说y不会增加,但为什么?y+1中的操作结果尚未保存。2-2我认为其他人的回答会有所帮助。如果代码错误,您将修改它以正确地考虑错误。@ MthSeLead它应该在代码中被递增,Y=0是不必要的,但是Y的值在每次调用函数时都不会被设置为0,评论者是错误的。这意味着算法是通用的,只要您可以通过任何函数指针,所以你可以在递归函数中执行任何你想要的函数,你所说的辅助函数是什么意思?因为它是一个递归函数,或者你的意思是如果你可以在递归函数本身内部打印值,答案是肯定的。@Mathleer在上一个程序中,递归函数和你可能会说实际做某事的函数都是一样的,如果这就是你所说的辅助函数。在第一个程序中有一个递归函数,recursiveFunctionint计数器,它检查给定的条件,如果不满足,它将调用自己,否则它将终止。在这个函数中,我们调用printValue函数,因此我们做了一些有趣的事情。在第二种情况下,做一些有趣事情的函数本身就是递归函数,因为除非满足条件,否则它会反复调用自己,这取决于需求是什么。
#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;
}
#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;
}