9.3 函数 :递归和倒序计算

[题目]以二进制形式打印十进制整数(除2取余、逆序输出)
[递归]
在递归程序中,起初一直没有明白为什么是直接输出,自己理解成需要建立一个数组将取余后的结果保存,然后逆序输出,但是其实这样就是完全理解错误了递归算法。
递归最重要的一点就是倒序输出!
举个例子:假设有一条函数调用链---recursion1()调用recursion2()、recursion2()调用recursion3()、recursion3()调用recursion4()。当recursion4()执行结束(条件不满足继续调用)时,控制转回recursion3();当recursion3()结束时,控制转回recursion2();当recursion2()结束时,控制转回recursion1(),这就是递归,不过在递归中所有的函数都是recursion()。
同时,在整个执行过程中,每级函数都有自己的变量,它们使用同一个变量名,但是对应于不同的数值,因此每一级程序返回时,都是不同的数值。
示例程序:

/* 以二进制形式打印整数 */
#include<stdio.h>
void to_binary(unsigned long n);
int main()
{
    unsigned long number;
    printf("please enter an integer (q to quit ):\n");
    while (scanf("%lu", &number) == 1)
    {
        printf("binary equivalent: ");
        to_binary(number);
        putchar('\n');
        printf("please enter an integer (q to quit ):\n");
    }
    printf("done.\n");
    return 0;
}
void to_binary(unsigned long n) //递归
{
    int r;
    r = n % 2;
    if (n >= 2)
    {
        to_binary(n / 2);
    }
    else;
    printf("%d", r);
    //putchar(r == 0 ? '0' : '1'); 占内存较多
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 第八章 递归(recursion) 8.1 导语 因为一些指导者倾向于先教递归作为第一个主要的控制结构,本章会以另...
    geoeee阅读 1,462评论 0 5
  • 原文地址:C语言函数调用栈(一)C语言函数调用栈(二) 0 引言 程序的执行过程可看作连续的函数调用。当一个函数执...
    小猪啊呜阅读 4,709评论 1 19
  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy阅读 9,541评论 1 51
  • 想减肥 没有恒心没有毅力 现在已经每天坚持只吃早餐和午餐 晚上不吃 杜绝一切零食 还是感觉没瘦下来 还...
    大情子阅读 72评论 0 0
  • 卓玛,你扬一根细软马鞭 扬彻我思慕的情怀 从美酒到扬琴 从草原之风到雪山之巅 原上舞动彩裙和哈达 卓玛,你可是那未...
    木子爱若阅读 545评论 2 12