c语言递归法解释,C语言递归求高手解释下,谢谢,急啊。

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

研究明白了,以上递归函数原理简述:

先要明白调用函数和被调函数之间的连接和信息交换是通过栈进行。要读取到栈的数据,只能读取栈顶,栈顶以下的数据是不能访问。要想访问下面的数据只能出栈,从栈顶到栈底顺序出栈。调用被调函数就会分配内存区,主要是局部变量的分配。函数结束,就会释放存储区(也就是释放内存,避免大的浪费,因为很大的程序就需要占用大内存),程序运行是被载入内存的,内存的存取速度快过硬盘,当然硬盘也能当内存使用,销毁栈的顺序是从栈顶往下。

无论有无return语句函数都要返回。有值反值,没值返回计算结果。

上面的程序进行递归的时候需要建栈,进行分配变量n,先进栈从变量5开始,进完之后:

1 栈顶 值:10

2 12

3 14

4 16

5 栈底 18

然后rerurn c返回一次执行c=age(n-1)+2=10,多次返回是假象,只是要销毁1 2 3 4个栈也就是变量,进行释放,直到返回到栈底。过程1栈即n=1,进行销毁,此时2栈为栈顶,第一次执行的c=age(n-1)+2重新执行,因为销毁了1栈的变量所以现在要使用新变量即2栈,结果要在计算一次,c=10+2=12。接着重复,直到5栈到达栈顶,函数彻底返回。

以下的递归函数使用

//把整数以字符打印

#include

int main()

{

void binary_to_ascii (int);

int ch_number;

scanf ("%d",&ch_number);

binary_to_ascii (ch_number);

printf ("\n");

return 0;

} 思路是除以10 然后逆向打印

void binary_to_ascii (int value)

{

int quotient;

quotient=value/10;

if(quotient!=0)

binary_to_ascii (quotient);

putchar(value%10+'0'); // 0+‘0’=‘0’ 1+‘0’=‘1’ 48+0=48 48+1=49’

}

改进打印所有数以字符

#include

void print_number(int number)

{

if(number<0)

{

putchar('-');

number=-number; 负数不能余运算,所以变正数

}

if(number/10) ///这里一定是(number/10)或写清晰是(number/10)!=0不能number

{ 或number!=0 下面讲下,这么写不是啰嗦

print_number(number/10);

}

putchar(number%10+'0');

}

int main(void)

{

void print_number(int);

int ch_number;

scanf ("%d",&ch_number);

print_number(ch_number);

printf ("\n");

return 0;

}

这个程序是这样的如15 进栈为15 除以10为1 余运算1 再出栈为15 余运算5 输出15

如123456 堆栈如下

1

12

123

1234

12345

123456

最后出栈顺序输出是 1余运算是1输出1 12余运算是2 输出2 123余3 输出3 1234余4 输出4最后123456余运算是6输出6 最后一个一个排在一起是123456

关于number/10 如果写number就会再除以10 所以输出会看到前面多个0 例子:

123/10=12 12!=0 12/10=1 1!=0 1/10=0 终止 此刻栈区变量有

123 12 1 0 所以最终输出是0123 也不需要非要number/10 number可以除以的数不能过小也不能过大,最后一个数是0-9范围,所以要大于9的整数,至于范围不能确定,因为你输入的数的位数在变,大小随机,所以结果可能异常。选9和11是稳定的,这个没仔细算过,也不能保证。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值