提问一道c语言简单的程序递归题目!!!!!!!!!!!!!!
#include<stdio.h>
main()
{
int 5;
void palin(int n);
printf("\40"); 这一行\40 什么意思
palin(i);
printf("\n");
}
void palin(n)
int n;
{
char next;
if(n<=1)
{
next =getchar();
printf("\n\0");
putchar(next);
}
else
{
next =getchar();
palin(n-1);
putchar(next);
}
}
不晓得他是怎么将五个字符反向顺序打印出来的
追问:如果我输入个 abcde
他程序是不是 i=5时 把 a给next
i=4 b给next
i=3 c给next
以此类推
输出的时候 先 输出 i=1 然后依次向后
但是我有个疑问 就是 next 一开始为 a 又为b 最后为e 这岂不是 矛盾 难道next 为数组??
答案:首先 应该是int i =5;
看递归体首先要看他的递归结束条件。 这里的结算条件是 n<=1
具体执行如下
i的值 代码
5 else 中的getchar()
4 else 中的getchar()
3 else 中的getchar()
2 else 中的getchar()
1 if中的 getchar() 并将最后一次输入的输出。
接下来就要执行 else 中的后半部分 putchar( next ).
因为是递归 ,所以要执行最里层的 也就是要输出 i = 2时的 next
以此输出 i=3 i=4 i= 5
这样就实现了 反向输出。
简单的递归跟踪一下就明白了, 负责的就要靠理解力了。
其他:可用递归方式实现,代码如下:
#include <stdio.h>
#define NUM_CHOOSE 100
#define DEN_CHOOSE 1000
void printResult(const int allow[10],int n)
{
int num[5];
int den[5];
int numChoose;
int denChoose;
long numV = 0;
long denV = 0;
for(int i=0;i<10;i++){
numChoose = (int)(allow[i]/NUM_CHOOSE)%10;
if(numChoose) {
num[numChoose-1] = i;
}else{
denChoose = (int)(allow[i]/DEN_CHOOSE)%10;
if(denChoose) den[denChoose-1] = i;
}
}
for(int i=0;i<5;i++){
numV = 10*numV + num[4-i];
}
for(int i=0;i<5;i++){
denV = 10*denV + den[4-i];
}
if(numV/denV==n){
printf("%05d/%05d\n",numV,denV);
}
}
void getFactor(int n,int k,int allow[10],int level)
{
for(int i=0;i<10;i++){// 分子
if(allow[i]!=i) continue;
for(int j=0;j<10;j++){ // 分母
if(allow[j]!=j || j==i) continue;
if(((n*i-j)+k)%10==0){
allow[i] += DEN_CHOOSE*level;
allow[j] += NUM_CHOOSE*level;
if(level==5){
printResult(allow,n);
}else{
getFactor(n,((n*i-j)+k)/10,allow,level+1);
}
allow[i] -= DEN_CHOOSE*level;
allow[j] -= NUM_CHOOSE*level;
}
}
}
return;
}
int main()
{
int nb[10] = ;
getFactor(2,0,nb,1); // 2可以改为2-79间数
}
运行结果如图:
上一个:2)两个指针变量不能( ) A.相加 B.相减 C.比较 D.指向同一地址
下一个:1)C语句int *func(); 中,func 表示的是( ) A.返回值为指针的函数名称 B.指针整型变量的指针 C.指向数组