编写一个函数,其功能是输出数字金字塔,要求用递归方法来解决。

编写一个函数,其功能是输出数字金字塔,要求用递归方法来解决。
运行效果:用户输入5,则屏幕显示:
1
121
12321
1234321
123454321
刚学C语言 用尽量简单易懂的程序 谢谢
给点提示也行 该怎么用递归的方法啊

#include <stdio.h>
int N;
void py( int n )
{
if ( n > 0)
{
int i;
py( n-1 ); //先输出前边的数
for(i=0;i<N-n;i++ ) //输出前导空格,这里N是全局变量,表示最大的数
printf(" ");
for(i=1;i<n;i++ ) //1到n-1
printf("%d",i );
for(;i>=1;i-- )
printf("%d",i ); //n到1
printf("\n"); //换行
}
}

int main()
{
printf("input N :");
scanf("%d", &N );
py( N );
return 0;
}

温馨提示:内容为网友见解,仅供参考
第1个回答  2014-12-02
#include<stdio.h>
void print(int i,int n)
{
if(i==n){printf("%d",i); return ;}
    printf("%d",i);
    print(i+1,n);
    printf("%d",i);
}
int main()
{
  int n,i,j;
  scanf("%d",&n);
  for(i=1;i<=n;i++)
  {
for(j=1;j<=n-i;j++) printf(" ");
print(1,i);
printf("\n");
  }
  return 0;
}

第2个回答  推荐于2018-02-28
void display(int n,int nSpace)
{
    int i = 0;
    int j = nSpace - n;

    if (n < 1)
    {
        return;
    }

    display(n - 1, nSpace);

    if (j < 0)
    {
        j = 0;
    }

    while (i++ < j)
    {
        printf(" ");
    }

    i = 0;
    while (i < n)
    {
        printf("%d", ++i);
    }
    while (i > 1)
    {
        printf("%d", --i);
    }
    printf("\n");
    return;
}

 

追问

原谅我的无知 但是主函数怎么写

追答#include <stdio.h>

int main()
{
    int n = 0;
    scanf("%d",&n);
    display(n,n);
    return 0;
}

本回答被提问者和网友采纳
第3个回答  2014-12-02

int max = 1;
void showTri(int h)
{
    int i = 0;
    int leftPadding = max - h;
    //递归显示上面的小三角形
    if(h>1)
    {
        showTri(h-1);
    }

    //显示最后一行
    for(i = 0;i<leftPadding;i++)
    {
        printf(" ");
    }
    for(i = 1;i<h;i++)
    {
        printf("%d",i);
    }
    for(i = h;i>0;i--)
    {
        printf("%d",i);
    }
    printf("\r\n");
}

int main(void)
{
    
    scanf("%d",&max);
    showTri(max);
}


第4个回答  2014-12-02
void print(n) {

if (n < 1) return;

print (n-1);

//打印第n行数字

for ( int i = 1; i <= n; i++) printf("%d", i);
for (int i = n-1; i >= 1; i ++) printf("%d", i);
printf ("\n");

}

编写一个函数,其功能是输出数字金字塔,要求用递归方法来解决。
include <stdio.h>int N;void py( int n ){if ( n > 0){int i;py( n-1 ); \/\/先输出前边的数for(i=0;i<N-n;i++ ) \/\/输出前导空格,这里N是全局变量,表示最大的数printf(" ");for(i=1;i<n;i++ ) \/\/1到n-1printf("%d",i );for(;i>=1;i-- )printf("%d",...

如何用JAVA 编写一个递归程序输出如下数字金字塔
这个不用递归吧,几个循环搞定了:for (int i=1; i<=4; i++){ for ( int k=1; k<=4-i; k++) System.out.print(" ");\/\/输出前导空格 for ( int j=1; j<=i, j++) System.out.print(""+j);\/\/输出升序数字 for ( int m=i-1; m>=1; m--) System.out.print...

pascal 的初级题
按顺时针方向自 1 开始顺序报数,报到指定值M时停止报数,报第M的人出列,并将他的密码作为新的M值,从他在顺时针方向的下一人开始,重新从 1 报数,如此类推,直至所有人全部出列为止.试编一程序求出列顺序,其中 N<=30,N及密码数从键盘输入.

大学福音经典编程题适用于专升本
21.数字金字塔 22.字符串左旋 23.[稍难不用看] 要求:写一个函数判断一个字符串是否是另一个字符串旋转后得到的 24.给数组删除重复的元素 25.C语言编程题求1! + 2! + 3! + 4!...+N 26.C语言编程题求斐波那契数(循环法与递归法 27.C语言编程输入n,k求n的k次幂(递归与非递归) 28.(递归)输入...

我的孩子今年小学五年级,要参加Turbo Pascal 7.0小学程序设计竞赛_百度...
2. 读入一个三位数字的正整数,将其反向输出.3. 输出三个数中的最大数.4. x,y,z的值分别为1,11,111,将它们靠左边对齐输出.5. x,y,z的值分别为1,11,111,将它们靠右边对齐打印输出.6. 对于输入的方程系数,求二元一次方程组的解.7. 输入两整数,求出它们的最大公约数和最小公倍数.8. 对于输入...

大学福音经典编程题适用于专升本
17.输入一个整数找出紧跟在他后面的素数 18.计数求和,Sn=2+22+222+2222+22222 19.输入两个数求最小公倍数和最大公因数,代码中有详解 20.一个数 +100之后是完全平方数,+168还是一个完全平方数 21.数字金字塔 22.字符串左旋 23.[稍难不用看] 要求:写一个函数判断一个字符串是否是另一个...

相似回答