| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 621 人关注过本帖
标题:递归问题求助
只看楼主 加入收藏
黑衣圣堂
Rank: 1
等 级:新手上路
帖 子:44
专家分:0
注 册:2006-3-13
收藏
 问题点数:0 回复次数:3 
递归问题求助

请大家看下下面的程序,当输入是ABC时,输出应该是什么?
我对其中的递归过程很是不理解,请大家帮帮忙啊!高手来帮我解释一下
其中的递归过程吧,谢谢!

#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <malloc.h>

char * NumberToChars( char number)
{
char *string;
string = ( char * )malloc( 10 * sizeof( char ) );
switch(number)
{
case '0': string = "000"; break;
case '1': string = "111"; break;
case '2': string = "ABC"; break;
case '3': string = "DEF"; break;
case '4': string = "GHI"; break;
case '5': string = "JKL"; break;
case '6': string = "MNO"; break;
case '7': string = "PRS"; break;
case '8': string = "TUV"; break;
case '9': string = "WXY"; break;
case '*': string = "***"; break;
case '#': string = "###"; break;
default : string = "???"; break;
}
return string;
}

char * ShixianChars( char *number)
{
char *p;
int i;
p = ( char *)malloc( 4 * strlen( number ) * sizeof( char ) );
for( i = 0; i < strlen( number ); i++ )
{
strcpy( p + i * 3, NumberToChars( number[ i ] ) );
}
return p;
}


static void ListMnemonics( char *p, int p1, int start, char *ps, int len )
{
int i;
if( strlen( ps ) == len )
{
printf( "%-10s", ps );
}
else
{
for( i = p1; i < p1 + 3; i++ )
{
if( p[i] == ' ')
{
continue;
}
ps[start] = p[i];
p[i] = ' ';
ps[start+1] = '\0';
ListMnemonics( p, p1+3, start+1, ps, len );
p[i] = ps[start];
}
}
}

main()
{
int len;
char number[10];
char *ps;
printf( "Input the numbers:" );
scanf( "%s", number );
len = strlen( number );
ps = ( char* )malloc( 100 * sizeof( char ) );
ListMnemonics( ShixianChars( number ), 0, 0, ps, len );
getch();
}

搜索更多相关主题的帖子: 递归 
2006-04-03 10:19
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:0 
以下是引用黑衣圣堂在2006-4-3 10:19:00的发言:

请大家看下下面的程序,当输入是ABC时,输出应该是什么?
我对其中的递归过程很是不理解,请大家帮帮忙啊!高手来帮我解释一下
其中的递归过程吧,谢谢!

#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <malloc.h>

char * NumberToChars( char number)
{
char *string;
string = ( char * )malloc( 10 * sizeof( char ) );
switch(number)
{
case '0': string = "000"; break;
case '1': string = "111"; break;
case '2': string = "ABC"; break;
case '3': string = "DEF"; break;
case '4': string = "GHI"; break;
case '5': string = "JKL"; break;
case '6': string = "MNO"; break;
case '7': string = "PRS"; break;
case '8': string = "TUV"; break;
case '9': string = "WXY"; break;
case '*': string = "***"; break;
case '#': string = "###"; break;
default : string = "???"; break;
}//对指针有错误认识才会写这样的代码,好好看看指针吧!char * 与c++中的String完全不是一会事,只有String string;才能string = "ABC";而char * string;string = ( char * )malloc( 10 * sizeof( char ) );则必须
strcpy(string,"ABC");
return string;
}

char * ShixianChars( char *number)
{
char *p;
int i;
p = ( char *)malloc( 4 * strlen( number ) * sizeof( char ) );
for( i = 0; i < strlen( number ); i++ )
{
strcpy( p + i * 3, NumberToChars( number[ i ] ) );
}
return p;
}


static void ListMnemonics( char *p, int p1, int start, char *ps, int len )
{
int i;
if( strlen( ps ) == len )
{
printf( "%-10s", ps );
}
else
{
for( i = p1; i < p1 + 3; i++ )
{
if( p[i] == ' ')
{
continue;
}
ps[start] = p[i];
p[i] = ' ';
ps[start+1] = '\0';
ListMnemonics( p, p1+3, start+1, ps, len );
p[i] = ps[start];
}
}
}

main()
{
int len;
char number[10];
char *ps;
printf( "Input the numbers:" );
scanf( "%s", number );
len = strlen( number );
ps = ( char* )malloc( 100 * sizeof( char ) );
ListMnemonics( ShixianChars( number ), 0, 0, ps, len );
getch();
}


九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2006-04-03 12:59
黑衣圣堂
Rank: 1
等 级:新手上路
帖 子:44
专家分:0
注 册:2006-3-13
收藏
得分:0 
但我运行后为什么能正确运行?

我不是一支恣意逃窜的箭,而是一个威灵的射手,我的直感,会引领着,把自我射向,更遥远的,流浪。
2006-04-05 11:10
makebest
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:3
帖 子:658
专家分:962
注 册:2005-3-17
收藏
得分:0 
看得头晕,虽然能正确运行,但这句变成多余的了:
string = ( char * )malloc( 10 * sizeof( char ) );
2006-04-05 13:33
快速回复:递归问题求助
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.025766 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved