9.3 函数 :递归和倒序计算

2017-07-11  本文已影响0人  日常表白结衣

[题目]以二进制形式打印十进制整数(除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'); 占内存较多
}
上一篇 下一篇

猜你喜欢

热点阅读