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