c语言中函数的递归
题目:用递归法把一个整数转换成字符串输出。
比较下面两种方法的不同:
putchar(n%10+'0')的位置不同,造成输出结果的不同。
方法一:
#include <stdio.h>
void convert(int n)
{
int i;
if((i=n/)!=)
convert(i);
putchar(n%+''); }
main()
{
int n;
printf("请输入一个整数n:\n");
scanf("%d",&n);
if(n<)
{
n=-n;
putchar('-');
convert(n);
}
else
{
convert(n);
} }
输入:123
输出:123

程序先是从main开始从上到下顺序执行,到convert(123).执行到if((i=n/10)!=0) convert(i);
从而去调用convert(12);convert(12)从上到下顺序执行,n/10=1;又去调用convert(1);convert(1)从上到下顺序
执行,n/10=0;不满足if的条件,执行printf(n%10+'0'),为1;至此,convert(1)函数执行结束,然后返回到convert(12)去执行它未完成的部分,printf(n%10+'0');输出2;convert(12)执行完毕,返回到convert(123)去执行它未完成的部分,printf(n%10+'0')输出。所以为123.
方法二:
#include <stdio.h>
void convert(int n)
{
int i; putchar(n%+'');
if((i=n/)!=)
convert(i); }
main()
{
int n;
printf("请输入一个整数n:\n");
scanf("%d",&n);
if(n<)
{
n=-n;
putchar('-');
convert(n);
}
else
{
convert(n);
} }

输入:123
输出:321
很明显第一种是我们想要的结果,可是有时也需要逆序输出,但为什么只通过交换语句的顺序就有顺序输出,逆序输出两种效果。我觉得我现在才明白了什么是递归。递归的真正过程是什么?
c语言中函数的递归的更多相关文章
- C语言中函数和指针的參数传递
近期写二叉树的数据结构实验.想用一个没有返回值的函数来创建一个树,发现这个树就是建立不起来,那么我就用这个样例讨论一下c语言中指针作为形參的函数中传递中隐藏的东西. 大家知道C++中有引用的概念,两个 ...
- c语言中函数的简单介绍
c语言中函数的介绍: 函数,简单的说就是代码的打包.存放在一个地方,当需要的时候调用. 函数分类: 1.无参无返回值函数 void func() 2.无参有返回值函数 int func() 3.有参 ...
- c语言中函数参数入栈的顺序是什么?为什么
看到面试题C语言中函数参数的入栈顺序如何? 自己不知道,边上网找资料.下面是详细解释 #include <stdio.h> void foo(int x, int y, int z){ ...
- C语言中函数参数传递
C语言中函数参数传递的三种方式 (1)值传递,就是把你的变量的值传递给函数的形式参数,实际就是用变量的值来新生成一个形式参数,因而在函数里对形参的改变不会影响到函数外的变量的值.(2)地址传递,就是把 ...
- C语言中函数返回字符串的4中方法
C语言中函数返回字符串的4中方法 函数的构成部分:返回类型.函数名称.参数.函数主体 参数:函数调用时传入的参数称为实参,函数定义时出现的参数为形参 形参的作用在于接收实参传入的值,形参和函数内部的其 ...
- C语言中函数的调用方式
第一眼看到这样一个题目的我,心想除了如下的直接调用还能怎么调用呢? 1 void fun(void) 2 { 3 ...... 4 //你的代码 5 ..... 6 } 7 int main(void ...
- Go语言中函数的实现
Go 语言函数 函数是基本的代码块,用于执行一个任务. Go 语言最少有个 main() 函数. 你可以通过函数来划分不同功能,逻辑上每个函数执行的是指定的任务. 函数声明告诉了编译器函数的名称,返回 ...
- Java中函数的递归调用
说到递归,java中的递归和C语言中也是很相似的,在Java中,递归其实就是利用了栈的先进后出的机制来描述的. public class HelloWorld { public static void ...
- c语言:函数的递归调用
c语言可以将代码模块化,这是其很重要的一个特性. 说道代码模块化,我们很自然的就会联想到函数.而函数中,比较难的一个知识点就是函数的递归调用. 值得注意的是,函数的递归调用在现实工作并不是很常用,但是 ...
随机推荐
- bzoj 1965: [Ahoi2005]SHUFFLE 洗牌
#include<cstdio> #include<cstring> #include<iostream> #define ll long long using n ...
- Codeforces Round #257 (Div. 1) (Codeforces 449D)
思路:定义f(x)为 Ai & x==x 的个数,g(x)为x表示为二进制时1的个数,最后答案为 .为什么会等于这个呢:运用容斥的思想,如果 我们假设 ai&x==x 有f(x ...
- HDU5478 原根求解
看别人做的很简单我也不知道是怎么写出来的 自己拿到这道题的想法就是模为素数,那必然有原根r ,将a看做r^a , b看做r^b那么只要求出幂a,b就能得到所求值a,b 自己慢慢化简就会发现可以抵消n然 ...
- HDU 5451 广义斐波那契数列
这道题目可以先转化: 令f(1) = 5+2√6 f(2) = f(1)*(5+2√6) ... f(n) = f(n-1)*(5+2√6) f(n) = f(n-1)*(10-(5-2√6)) = ...
- CodeForces 546A-Soldier and Bananas
题意: 有n dollar,the first banana cost k dollars,第i个就需cost k*i,问买w个bananas是否需要借钱:借钱需要多少? 分析:首先计算w个bana ...
- FB分别编译各个项目
FB里面有个 ActionScript模块 功能, 可以将 不同模块分别编译成一个个swf,这样会将各个独立的模块从主swf中分离出来.如果玩家没使用过这个模块,就不会加到内存中去,这样可以减少不必要 ...
- (转载)Htmlparser Filter 简要归纳
1 . 逻辑关系:与或非 AndFilter() Creates a new instance of an AndFilter. AndFilter(NodeFilter[] pr ...
- java基础之 创建对象的几种方式
有4种显式地创建对象的方式: 1.用new语句创建对象,这是最常用的创建对象的方式. 2.运用反射手段,调用java.lang.Class或者java.lang.reflect.Constructor ...
- STL 源码分析《5》---- lower_bound and upper_bound 详解
在 STL 库中,关于二分搜索实现了4个函数. bool binary_search (ForwardIterator beg, ForwardIterator end, const T& v ...
- Python 字符串处理大全.
Python 字符串 字符串是Pyhton中常用的数据类型,我们可以使用引号来创建字符串 . 创建字符串很简单 , 就不说了 . Python 访问字符串中的值 鬼叔本着简洁 使用的设计目的 , 在设 ...