怎样用c语言来编写杨辉三角形的递归程序?

怎样用c语言来编写杨辉三角形的递归程序?,第1张

方法一:用二维数组来编写。

方法二:用自定义函数来编写。

首先,杨辉三角的两个腰边的数都是1,其它位置的数都是上顶上两个数之和。杨辉三角的任意一行都是的二项式系数,n为行数减1。也就是说任何一个数等于这个是高中的组合数。n代表行数减1,不代表列数减1。如:第五行的第三个数就为=6。

先定义一个二维数组:a[N][N],略大于要打印的行数。再令两边的数为1,即当每行的第一个数和最后一个数为1。a[i][0]=a[i][i-1]=1,n为行数。除两边的数外,任何一个数为上两顶数之和,即a[i][j]=a[i-1][j-1]+a[i-1][j]。最后输出杨辉三角。

方法一二维数组代码如下:

#include

<stdio.h>#define

N

14void

main(){ int

i,

j,

k,

n=0,

a[N][N]

/*定义二维数组a[14][14]*/ while(n<=0||n>=13){

/*控制打印的行数不要太大,过大会造成显示不规范*/printf("请输入要打印的行数:") scanf("%d",&n) } printf("%d行杨辉三角如下:\n",n) for(i=1i<=ni++)a[i][1]

=

a[i][i]

=

1

/*两边的数令它为1,因为现在循环从1开始,就认为a[i][1]为第一个数*/ for(i=3i<=ni++)for(j=2j<=i-1j++) a[i][j]=a[i-1][j-1]+a[i-1][j]

/*除两边的数外都等于上两顶数之和*/ for(i=1i<=ni++){for(k=1k<=n-ik++) printf("

")

/*这一行主要是在输出数之前打上空格占位,让输出的数更美观*/for(j=1j<=ij++)

/*j<=i的原因是不输出其它的数,只输出我们想要的数*/ printf("%6d",a[i][j])printf("\n")

/*当一行输出完以后换行继续下一行的输出*/ } printf("\n")}

方法二:自定义函数代码:

杨辉三角中的任何一个数都等于一个组合数。

#include

<stdio.h>/* *

定义阶乘,在这里可能会想。为什么要用float,当我试第一次的时候, *

如果用int的话,那么在打印行数多了以后就会出错。 *

这是因为阶乘的数比较大,如果用int就不够用了。下同 */float

J(int

i){ int

j float

k=1 for(j=1j<=ij++)k=k*j return(k)}float

C(int

i,int

j){

/*定义组合数*/ float

k k=J(j)/(J(i)*J(j-i)) return(k)}void

main(){ int

i=0,j,k,n

/*打印杨辉三角*/ while(i<=0||i>16){printf("请输入要打印的行数:") scanf("%d",&i) } printf("%d行杨辉三角如下:\n",i) for(j=0j<ij++){for(k=1k<=(i-j)k++) printf("

") for(n=0n<=jn++) printf("%4.0f",C(n,j)) printf("\n") } printf("\n\n")}

标个记号准备上传对大神的源码分析。好了,我分析了上楼大神的代码实现,具体参考他的代码,分享下。注:可以看看《算法精解》Kyle Loudon著  或者《数据结构》 主编 安训国 他们说的堆栈原理。

#include <stdio.h>

 

char* dg(char* instr, char* outstr, char* outstr2) 

{

    if (*instr == 0) 

    {

        *outstr = 0

        return outstr2

    }

    *(outstr + 1) = *instr

    outstr = dg(instr + 1, outstr + 2, outstr2)

/* 下两句一直不执行,直到outstr = dg(instr + 5, outstr + 10, outstr2)返回后才执行,其后不断执行后三句!*/

    *outstr = *instr - 32

    return outstr + 2

}

 

int main()

{

    char buf[50]

    dg("aybdx", buf, buf)

    puts(buf)

    return 0

}

以 C 语言为例,举一个最最经典的例子就是:计算一个整数的阶乘。

#include <stdio.h>

int my_jiecheng( int ) /* 计算阶乘子函数原型说明 */

int main( )

{

int num, result = 0

scanf("%d", &num) /* 从键盘输入一个整数 num */

result = my_jiecheng(num) /* 调用计算阶乘子函数 my_jeicheng( ),并将最终的结果保存在 result 变量中 */

printf("result = %d\n", result ) /* 输出最后的计算结果 */

return 0

}

int my_jiecheng( n )

{

if( n == 1 ) /* 定义: 1!== 1,即:1 的阶乘等于 1 */

return (1) /* n == 1,返回 1 */

else /* 递归调用 my_jiecheng( ) 子函数 */

return( n * my_jiecheng(n-1) ) /* 否则的话,n != 1,递归调用 n*(n-1) ! */

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8107707.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-13
下一篇 2023-04-13

发表评论

登录后才能评论

评论列表(0条)

保存