C语言学习笔记1——10进制转换2进制(递归调用)
一、代码如下:
#include<stdio.h>
void fun(int n) { if(n/2) fun(n/2); printf("%d",n%2); } int main() { fun(10); printf(" "); return 0;
}
二、代码执行流程:
主要执行段:
if(n/2) fun(n/2); printf("%d",n%2);
程序第一次执行:
if(10/2=5≠0≠0)/值为真,执行内部语句 fun(10/2=5); /fun(5)目前未知 printf(“%d”,10%2); /此句的执行必须在if语句内的语句执行完后,即内部语句出现明确值时
程序第二次执行:
if(5/2=2.5≠0≠0)/值为真,执行内部语句 fun(5/2=2.5); /定义类型为整型,将2.5强制转换为2 ,fun(2)目前未知 printf(“%d”,5%2); /此句的执行必须在if语句内的语句执行完后,即内部语句出现明确值时
程序第三次执行:
if(2/2=1≠0≠0)/值为真,执行内部语句 fun(2/2=1); /fun(1)目前未知 printf(“%d”,5%2); /此句的执行必须在if语句内的语句执行完后,即内部语句出现明确值时
程序第四次执行:
if(1/2=0.5)/将0.5强制转化为整型0,值为假 fun(n/2); /不在执行此句
printf(“%d”,1%2); /此句执行输出1%2=1
三、递归(过程见照片)
紫色为递归流程