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

时间:2015-01-11 21:03:08

标签: 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;
}

如何重写算法以使其递归?

3 个答案:

答案 0 :(得分: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;
}

#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;
}

答案 1 :(得分:1)

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

答案 2 :(得分:0)

而不是

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);
}

已编译 - &gt; His function

已编译 - &gt; Recursive function

参见相同的输出,我刚刚做了OP想要的。

个人我会这样做,没有递归函数避免无限循环:

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

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