c語言 十進制轉換成二進制 遞歸實現,函數代碼很短,但是很難懂!
int fun(int n) //十進制轉換成二進制遞歸函數
{
if(n) //遞歸停止的條件
{
fun(n/2); //遞歸
printf("%d",n&1);
}
}
在理解這個遞歸函數之前,先學了學遞歸是怎麼實現的。
例如:
int fun1(int n) //隨便寫的遞歸函數
{
if(n) //遞歸終止條件
{
printf("%d ",n);
fun1(n/2);
printf("%d ",n);
}
}
根據這個函數運行,輸入n=12,則輸出的是12 6 3 1 1 3 6 12。
爲了能直觀的看出遞歸函數是怎麼運行的,需要進行拆分;上面這個函數可以拆分成這樣。
int fun1(int n) //假設你=12
{
if(n)
{
printf("%d ",n);
int fun1(n=6)
{
if(n)
{
printf("%d ",n);
int fun1(n=3)
{
if(n)
{
printf("%d ",n);
int fun1(n=1)
{
if(n)
{
printf("%d ",n);
int fun1(n=0)
{
if(n)
{
printf("%d ",n);
printf("%d ",n);
}
}
printf("%d ",n);
}
}
printf("%d ",n);
}
}
printf("%d ",n);
}
}
printf("%d ",n);
}
}
拆分出來的代碼不能運行,因爲函數中不能定義函數。
代碼是自上向下運行的,所以就不難看出遞歸函數輸出的是12 6 3 1 1 3 6 12。
通過理解這個舉例的遞歸函數,這個十進制轉換成二進制遞歸函數就變得簡單了;總代碼如下:
#include <stdio.h>
#include <stdlib.h>
int fun(int n) //十進制轉換成二進制遞歸函數
{
if(n) //遞歸停止的條件
{
fun(n/2); //遞歸
printf("%d",n&1);
}
}
int main()
{
int a;
scanf("%d",&a); //輸入要轉換成二進制的數
fun(a); //運用函數
system("pause");
return 0;
}