用递归法将整数n转换成字符串,输入483,输出字符“483”,怎么理解递归函数,putchar是输出一个字符。。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用递归法将整数n转换成字符串,输入483,输出字符“483”,怎么理解递归函数,putchar是输出一个字符。。相关的知识,希望对你有一定的参考价值。
#include<stdio.h>
void convert(int n)
int i;
if ((i=n/10)!=0)
convert(i);
putchar(n%10+'0');
main()
int number;
printf("\nInput an integer:");
scanf("%d",&number);
printf("Output:");
if (number<0)
putchar('-');
number=-number;
convert(number);
这个代码,分析如下:
以483为例,首次调用n=483,n除以10等于48,48不等于0,就递归调用自己,参数是n=48,48除以10等于4,继续调用自己,参数n=4,4除以10等于0,停止调用自己,显示一个字符,即4,返回上一个调用自己的地方,即参数n等于48的那一层面,返回后n是等于48,48%10等于8,所有屏幕接着4后面显示8,再返回到n等于483那一层面,483%10等于3,屏幕显示3,接着返回,就返回到main里,完成递归函数调用。屏幕最终显示483。
总结,这个递归方法是先找到最高位,显示最高位,依次显示次高位,直到全部数字位显示
完成。追问
停止调用自己,显示一个字符,即4,返回上一个调用自己的地方,关键是怎样一个一个返回的就是这里不懂
追答每一个函数调用,哪怕调用自己,当返回的时候都返回到调用的下一句代码执。这个说起来不好解释,最简单的办法就是,你调试方式运行程序,一步步跟踪代码运行,你就知道代码是怎么样运行的。
不要说你不会调试跟踪程序吧
void convert(int n)
int i;
if ((i=n/10)!=0) //如果n>=10时
convert(i); //去掉n的个位数再递归调用自身(先处理个位数以上的部分)
putchar(n%10+'0'); //当n的个位数以上的部分全部输出完成后,再输出个位数的数字字符
main()
int number;
printf("\nInput an integer:"); //提示
scanf("%d",&number); //输入一个整数
printf("Output:");
if (number<0) //输入为负数时的处理
putchar('-'); //先输出一个负号
number=-number; //把输入的数变为正数
convert(number); //调用递归函数,把输入的数以一个个字符方式输出
2017-03-06
1.用递归法将一个整数n转换成字符串。例如,输入483,应输出字符串“483”。n的位数不确定,可以是任意的整数。
#include <stdio.h> void zifu(int n); int main() { int n; printf("请输入数字n\\n"); scanf("%d",&n); zifu(n); printf("%c",n); return 0; } void zifu(int n) { int a; char b; if(n!=0) { zifu(n/10); a=n%10; b=a+‘0‘; printf("%c",b); } }
总结:1.在调用一个函数过程中又出现直接或间接的调用函数自身称为函数的递归调用。
2.递归的两个条件(1)回推公式:将大规模问题转化成小规模问题 (2)边界条件:就是递归的终止条件
3.这道题主要把函数的调用和算法弄懂 输入一个数在自定义函数里通过函数公式一直调用自己本身直到为零为止 再将各数字依次输出
2.用递归法写出1+2+3+·······+99+100的程序。
#include <stdio.h> int leijia(int n); int main() { int a; a=leijia(100); printf("%d",a); return 0; } int leijia(int n) { if(n==1) return 1; else return n+leijia(n-1); }
3.用指针改写交换两个数
#include <stdio.h> void jiaohuan(int *m,int *n); int main() { int m,n; printf("请输入两个数m和n\\n"); scanf("%d%d",&m,&n); jiaohuan(&m,&n); printf("%d %d",m,n); return 0; } void jiaohuan(int *m,int *n) { int temp; temp=*m; *m=*n; *n=temp; }
总结:1.指针就是变量的地址 指针变量存储是变量的地址 指针变量量的存储空间中存放的是一个地址
2.*指针变量=初始地址值
3.
4.
int ia;
int *pi;
ia=100;
pi=&ia; //&ia的计算结果为变量ia的地址 对&后面的变量进行取地址运算
5.指针变量只能指向定义时所规定类型的变量
以上是关于用递归法将整数n转换成字符串,输入483,输出字符“483”,怎么理解递归函数,putchar是输出一个字符。。的主要内容,如果未能解决你的问题,请参考以下文章
C语言:用递归法讲一个整数n转换成字符串。例如输入483,应输出字符串“483”,n的位数不定,为任意位数整