大师,
我想知道如何编写打印
的递归函数 1
12个
123个
1234
...
......
例如:display(4)应打印
1
12个
123个
1234
#include <stdio.h>
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个
我想写一个纯递归 (没有任何循环)功能,但无法过滤不需要的打印件。 希望有人能帮帮我!!!
感谢大家的回答。从所有给出的评论看来,我们可以编写一个只有递归,并且需要循环。
答案 0 :(得分:4)
要定义递归函数,您必须做三件事:
因此,我们最终得到以下算法:
function display(n):
if(n > 1):
display(n-1);
print 1..n;
答案 1 :(得分:1)
编辑:好的,我用@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");
}
答案 2 :(得分:0)
我们一直用参数-1调用PrintIt(),直到x&lt; 1.当x <1时,每个呼叫将以相反的顺序返回。 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;
}
答案 3 :(得分: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);
}
答案 4 :(得分:0)
只是为了好玩,这是一个纯粹的递归解决方案。它在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",
答案 5 :(得分:0)
#include<stdio.h>
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<n){
printf("\n");
x++;
print_num(x);
}
}
这很简单,对吧?
答案 6 :(得分:0)
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;
}
答案 7 :(得分:0)
这个问题相当陈旧,但没有一个答案回答实际问题,即。仅使用递归解决C中的问题,没有显式循环。
这是一个简单的解决方案,通过解决原始代码中存在的误解(&#34; print&#34;的两个可能功能之间的混淆)获得。没有明确的循环。
#include <stdio.h>
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);
}