当前位置:编程学习 > C/C++ >>

提问一道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.指向数组

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,