[題目]以二進(jìn)制形式打印十進(jìn)制整數(shù)(除2取余、逆序輸出)
[遞歸]
在遞歸程序中,起初一直沒有明白為什么是直接輸出,自己理解成需要建立一個數(shù)組將取余后的結(jié)果保存,然后逆序輸出,但是其實(shí)這樣就是完全理解錯誤了遞歸算法。
遞歸最重要的一點(diǎn)就是倒序輸出!
舉個例子:假設(shè)有一條函數(shù)調(diào)用鏈---recursion1()調(diào)用recursion2()、recursion2()調(diào)用recursion3()、recursion3()調(diào)用recursion4()。當(dāng)recursion4()執(zhí)行結(jié)束(條件不滿足繼續(xù)調(diào)用)時,控制轉(zhuǎn)回recursion3();當(dāng)recursion3()結(jié)束時,控制轉(zhuǎn)回recursion2();當(dāng)recursion2()結(jié)束時,控制轉(zhuǎn)回recursion1(),這就是遞歸,不過在遞歸中所有的函數(shù)都是recursion()。
同時,在整個執(zhí)行過程中,每級函數(shù)都有自己的變量,它們使用同一個變量名,但是對應(yīng)于不同的數(shù)值,因此每一級程序返回時,都是不同的數(shù)值。
示例程序:
/* 以二進(jìn)制形式打印整數(shù) */
#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'); 占內(nèi)存較多
}