c语言:不使用数组编写杨辉三角形10行的递归程序

请编写打印杨辉三角行到10行的c语言递归程序
注:我是刚学c语言的,才刚学到递归,请不要使用数组符号做这道题,我还没有学到,
也请尽量简单编写这道题的递归程序

//输出杨辉三角

# include <stdio.h>

void main()

{

int yang(int x, int y);

int i, j, k;

for(i = 1; i <= 10; i++)//i控制行数

{

for(j = 0; j <10-i; j++)

printf(" ");

for(k = 1; k <= i; k++)//y表示这一行中第几个数

printf("%4d", yang(i, k));

printf("\n");

}

}

int yang(int x, int y)

{

int z;

if(y == 1 || y == x)  z = 1;

else z = yang(x-1, y-1) + yang(x-1, y);

return z;

}

不知道能不能满足lz要求。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-04-17
#include<stdio.h>

int * yh(int num)
{
int * p;
int * lastp;
int i;
p = new int[num+1]; //动态分配num+1的空间,存储第num行的杨辉数
*p = 1; //第1个杨辉数 等于1
if(num!=0)
{
lastp = yh(num-1); //计算num-1行的杨辉数,结果由lastp获得
for(i=1;i<num;i++)
*(p+i) = *(lastp+i-1) + *(lastp+i); //lastq杨辉数两两相加
}
*(p+num) = 1; // 最后一个杨辉数等于1
for(i=0;i<=num;i++)
printf("%d ",*(p+i)); //输出第num行的杨辉数
printf("\n");
return p;
}

void main()
{
int * p;
p = yh(10);
}

杨辉三角的初值(第0行)是1,第1行是1,1 ,第2行是1,2,1 ,。。。第n行的第1个和最后一个数都是1,中间的数比第n-1行少1个,而且是第n-1行依次两两相加的结果。所以递归算法就是:第n行的第1个和第n+1个数是1,第2个到第n个数是第n-1行结果依次两两相加。递归结果的输出很关键,就是输出第n行的杨辉数。
因为不准用数组,所以这里采用了指针。每一行分配n+1个整数空间给p,*(p+0)代表第1个杨辉数,*(p+1)代表第2个杨辉数,*(p+n)代表第n+1个杨辉数,可以看出来,*(p+0)=1, *(p+n)=1;
递归函数返回该行的杨辉数的指针。
所以递归算法的核心:计算第n行的杨辉数,首先要获得第n-1行的杨辉数,这个杨辉数递归调用计算第n-1行的杨辉数,其结果由指针lastp获得,然后计算第n行的杨辉数:
*(p+i) = *(lastp+i-1) + *(lastp+i);(1<=i<=n-1)也就是除第1个和第n+1个杨辉数之外的杨辉数是上一行杨辉数两两相加。
在递归调用中输出结果就可以了。
第2个回答  2012-04-17
#include "stdafx.h"
/*#include <iostream>
#include <iomanip>
#include <fstream>
#include <string>
using namespace std ;
*/

#include <stdio.h>

int Multiply( int N ) // 排列 阶乘
{
if( N == 0 )
return 1 ;
else
return N * Multiply( N -1 ) ;
}
int Combine( int N , int M ) // 组合
{
return Multiply( N ) / ( Multiply( M ) * Multiply( N - M )) ;
}

void Print( int N = 1 )
{
for( int i = 0 ; i < 11 - N ; i++ )
printf( " " ) ;
for( int k = 0 ; k <= N - 1 ; k++ )
{
int num = Combine( N - 1, k) ;
printf( "%3d ", num ) ;
}
printf( "\n" ) ;
if( N > 10 )
return ;
else
Print( N + 1 ) ;
}

int main()
{
Print() ;
return 0 ;
}
第3个回答  2012-04-17
请问用什么语言?