c語言 十進制轉換成二進制 遞歸實現

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;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章