递归函数c语言教案 函数与递归c语言

c语言: 编写递归函数把输入的一个负整数转换成二进制输出

根据评论要求,改进代码:

从网站建设到定制行业解决方案,为提供成都网站设计、做网站服务体系,各种行业企业客户提供网站建设解决方案,助力业务快速发展。创新互联将不断加快创新步伐,提供优质的建站服务。

1、函数getBCode是题目要的递归函数,实现转二进制(最高位是符号位)。

思路是十进制数绝对值除以2求余,得到反向二进制原码,反向创建链表保存结果,最终得到的单向链表就是完整二进制数原码,之后根据正负性,负数取反+1。链表头添加符号位。

2、函数freeBny为释放链表,如要重复调用函数getBCode,每次调用需调用一次freeBny。

3、函数showBny是打印输出,为对齐显示,按4的倍数位打印,高位补齐的位数值均与符号位一致。

#include stdio.h

#include malloc.h

#include math.h

typedef struct binary//成员用char类型保存数值,不是'1'或'0'的ASCII码

{

char b;//一位二进制数0或1

struct binary *next;

}BNY;

BNY *getBCode(int n);//获得二进制数(最高位是符号位)

void showBny(BNY *bnyHead);//对齐打印二进制数(保证是4的倍数)

void freeBny(BNY *bnyHead);//释放二进制数链表空间

int main()

{

int n;

BNY bny,*bnyHead=bny;

while(1)

{

  printf("请输入一个整数:"),scanf("%d",n);

  bnyHead-next=getBCode(n);

  printf("转为二进制数:"),showBny(bnyHead);

  freeBny(bnyHead);

  printf("\n");

}

return 0;

}

void freeBny(BNY *bnyHead)

{

BNY *prev=NULL,*bny=NULL;

bny=bnyHead-next;

while(bny)

{

  if(prev) prev-next=NULL,free(prev),prev=NULL;

  prev=bny;

  bny=bny-next;

}

bnyHead-next=NULL;

}

void showBny(BNY *bnyHead)

{

int i,f=-1,len=0,n=0;

BNY *bnySave=bnyHead;

while(bnyHead-next)

{

  if(f==-1) f=bnyHead-next-b;

  len++;

  bnyHead=bnyHead-next;

}

if(len%4)

  n=4-len%4;

for(i=0;in;i++)printf("%d",f);

bnyHead=bnySave;

while(bnyHead-next)

{

  printf("%d",bnyHead-next-b);

  n++;

  if(n==4)printf(" "),n=0;

  bnyHead=bnyHead-next;

}

}

BNY *getBCode(int n)

{

int s,y;

static BNY*bnyPrev=NULL;

static int cy=0,f=-1;//加1进位用

if(f==-1 n=0)f=1;

if(f==-1 n0)f=0,cy=1;

n=abs(n);

BNY *bnyNew=NULL;

s=n/2,y=n%2;

bnyNew=(BNY *)malloc(sizeof(BNY));

if(!bnyNew) return NULL;

bnyNew-b=y;

// 如是负数,直接取反+1

if(!f) bnyNew-b=!(bnyNew-b);//从最低位开始,负数取反

if(cy)bnyNew-b=bnyNew-b+cy,cy=0;//负数+1

if(bnyNew-b1)bnyNew-b=0,cy=1;

bnyNew-next=NULL;

if(bnyPrev) bnyNew-next=bnyPrev;

bnyPrev=bnyNew;

n=s;

if(n==0)

{

  bnyNew=(BNY *)malloc(sizeof(BNY));//添加符号位

  if(!bnyNew) return NULL;

  if(!f)

      bnyNew-b=1;

  else

      bnyNew-b=0;

  bnyNew-next=bnyPrev;

  bnyPrev=NULL;

  cy=0,f=-1;

  return bnyNew;

}

return getBCode(n);

}

C语言编写递归函数int gcd(int m,int n),计算m和n的最大公约数

#include stdio.h

int gcd(int m,int n) {

if(m*n==0)

return (m==0?n:m);

if(mn)

return gcd(m%n,n);

else if(mn)

return gcd(n%m,m);

}

int main(void) {

int m,n;

printf("请输入两个数:\n");

scanf("%d%d",m,n);

printf("其最大公约数为:\n");

printf("%d\n",gcd(m,n));

return 0;

}

运行结果

C语言定义递归函数reverse(n),

# include stdio.h

void reverse( int n); //函数声明

void main ( )

{   int n;

printf("Input n: "); scanf("%d",n);

if(n0) n=-n;

printf("The reversed digits are: ");

reverse(n);

printf("\n");

}

void reverse(int n)   //定义递归函数

{ printf("%d", n%10);  //输出最低位数

if(n/10!=0)   reverse(n/10);  //如果除去最低位后还有其他数字,递归处理剩余部分

}

C语言递归函数(请确认问题后再回答)

这个题用循环语句比较简单,递归的话稍微复杂点,下面是我刚写的:

Hand和Hand2是递归函数;Test是测试函数,用来检验x1,x2,x3的值是否满足条件,满足的话输出(这个函数不是重点,我只写了句提示,你把它补充完整就行);fun函数直接调用Hand函数,主函数中把fun函数放进去就行了。

void fun(bool x1,bool x2,bool x3){

static int count=0;

Hand(x1,x2,x3,count);

}

void Test(bool X,bool Y,bool Z){ //测试函数

if((x1 || !x2 || x3)(!x1 || x2 || x3)) ..... 输出X,Y,Z的值

}

bool Hand2(int x){ //递归函数,按顺序为x1x2x3赋值

if(x=0) return false;

ruturn !Hand(x-1);}

void Hand(bool x1,bool x2,bool x3,count) //递归函数,依次赋值并检测(调用了Hand2和Test)

{

if (count=8) return ;

x1=Hand2(count%4);x2=Hand2(count%2);x3=Hand2(count);

Test(x1,x2,x3);

Hand(x1,x2,x3,count++);

}

采用就给分吧。

c语言,编写一个递归函数,实现将任意的正整数按反序输出。例如:输入 123456,输出为 654321。

#include "stdio.h"

void intrev(int n){

if(n){

printf("%d",n%10);

intrev(n/10);

}

}

int main(int argc,char *argv[]){

int x;

printf("Please enter a positive integer...\n");

if(scanf("%d",x)!=1 || x1){

printf("Input error, exit...\n");

return 0;

}

intrev(x);

printf("\n");

return 0;

}

运行样例:

c语言函数递归调用

我给你举个简单的例子你就明白了,你可以假设n=3

然后代入这个函数,a(3)=a(2)+5;而a(2)=a(1)+5;a(1)=1

所以最后就是a(3)=1+5+5=11…

同理你可以算出a(10)=1+5*9=46

满意请采纳


网站栏目:递归函数c语言教案 函数与递归c语言
文章URL:http://pwwzsj.com/article/hiesgo.html