将数字的每一位取变量(写递归时的步骤)
法一:正常顺序思路
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
int a;
cin>>a;
while(a%10!=0) //循环结束条件
{
cout<<a%10<<" ";
a=a/10;
}
return 0;
}
法二:递归方法1
#include <iostream>
#include <cstdio>
using namespace std;
int fun(int a) //单元:把传入的参数的最后一位输出
{
if(a==0) return 0; //递归终止的条件(考虑递归之后添加的代码)(2nd)
if(a>0) //功能单元所需的代码(1st)
cout<<a%10<<" "; //功能单元所需的代码(1st)
fun(a/10); //(考虑递归之后添加的代码:重复的功能单元)(2nd)
}
int main()
{
int n; cin>>n;
fun(n);
return 0;
}
法三:递归方法2
#include <iostream>
#include <cstdio>
using namespace std;
int fun(int a) //功能单元:输出传入参数的最高位
{
if(a==0) return 0; //写完功能单元以后,回头补充递归终止的条件
int b=a;
int i=0;
while((a/10)%10!=0) //fun的功能单元:输出传入参数的最高位(在写递归的时候,必须把这一步实现出来)
{
a=a/10;
i++;
}
cout<<a<<" "; //fun的功能单元到此结束
int s=1; //为写递归做出准备
for(int j=0;j<i;j++)
s*=10;
fun(b-a*s); //b-a*s是下次递归需要的参数
}
int main()
{
int n; cin>>n;
fun(n);
return 0;
}