如何编写递归打印程序

大师,

我想知道如何编写打印的递归函数

1
12
123
1234

……

例如:display(4)应该打印

1
12
123
1234

#include  void print(int n) { if(n != 0) { print(n-1); printf("\n"); print(n-1); printf("%d",n); } } int main() { print(3); } 

产量
1

12

1

123

问题

我想写一个纯递归 (没有任何循环)函数,但无法过滤不需要的打印。 希望有人能帮助我!

更新

谢谢大家的答案。从所有给出的评论看起来我们可以只用递归编写一个,并且需要一个循环。

要定义递归函数,您必须做三件事:

  1. 定义函数的function。 在这种情况下,它打印从1到n的数字。
  2. 定义递归调用的内容。 下次会发生什么? 最简单的方法是自下而上思考; 在这种情况下,在每个较早的行上,打印数量最多比前一个少一个。 因此,每次再次调用该函数时,您希望使用少于前一个数字的函数调用它。
  3. 定义停止条件。 什么时候应该停止递归? 在这种情况下,一旦你点击数字1,这将是你的最后一次迭代。 这意味着,我们想要调用递归函数, 直到达到此停止条件 – 或者换句话说, n大于1时。

因此,我们最终得到以下算法:

 function display(n): if(n > 1): display(n-1); print 1..n; 

编辑:好的,我用@lc的指南改进了我的答案。

 void print_recursive(unsigned int num) { if (num > 1) { print_recursive(num - 1); } for (unsigned int i = 0; i < num; i++) { printf("%d ", (i + 1)); } printf("\n"); } 

我们继续用参数-1递归调用PrintIt()直到x <1。当x <1时,每次调用将以相反的顺序返回。在每次返回时,我们打印一行从1开始到x。

 #include "stdio.h" void PrintIt( int x ) { int i; if( x > 1 ) { PrintIt( x - 1 ); printf("\n"); } for( i = 1; i < x+1; i++) { printf("%d", i); } return; } int main(int argc, char *argv[]) { PrintIt( 4 ); return 0; } 

这里使用的递归函数是func(int)。 最初,该值从main()程序传递。 递归发生直到我们达到退出条件,在这种情况下val = 0。 一旦达到该水平,我们将倒数第二帧移动打印“1”。 遵循相同的模式以获得序列“1 2”。 。 。 “1 2 3”。 。 。 “1 2 3 4”

 int func(int val){ int temp,i; if( val == 0 ) { val++; return val; } else { val--; temp=func( val ); for (i=1;i<=temp;i++) { printf("%d",i); } printf("\n"); temp++; return temp; } } int main(){ int value=4, result; result=func(value); } 

只是为了好玩,这是一个纯粹的递归解决方案。 它在python中,无论如何都是伪代码。 (非pythonic换行符是为了清晰起见)。

 def loop(max, row=1, col=1): if col <= row: print col, loop(max, row, col+1) elif row < max: print "\n", loop(max, row+1, 1) else: print "\n", 
 #include void print_num(int x); int n; void main(){ printf("Enter number of lines: "); scanf("%d",&n); print_num(1); } void print_num(int x){ int i; for(i=1;i<=x;i++){ printf("%d",i); } if(x 

这很简单吧?

 void display(int k) { if (k < 1) { return; } display(k-1); for (int i = 1; i <= k; i++) { cout << i; } cout << endl; } int main() { int a = 4; display(a); return 0; } 

这个问题很古老,但没有一个答案能回答实际问题 ,即。 仅使用递归解决C中的问题,没有显式循环。

这是通过解决原始代码中存在的误解(“打印”的两个可能function之间的混淆)而获得的简单解决方案。 没有明确的循环。

 #include  void countto(int n) { if(n != 0) { countto(n-1); printf("%d",n); } } void triang(int n) { if(n != 0) { triang(n-1); printf("\n"); countto(n); } } int main() { triang(4); }