我写了以下程序:
#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;
}
如何重写算法以使其递归?
答案 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);
}