递归设计思路
数列递归 : 如果一个数列的项与项之间存在关联性,那么可以使用递归实现 ;
原理 : 如果一个函数可以求A(n),那么该函数就可以求A(n-1),就形成了递归调用 ;
注意: 一般起始项是不需要求解的,是已知条件
递归求解问题的过程 :
第一步 : 找出规律
第二步: 函数调用自己求解前面的项
第三步: 交代起始项,让递归能够停止
目录
编程求解1+2+3+...+n
问题描述
编程求解下列式子的值:
S=1+2+3+⋯+n。
输入
输入一行,只有一个整数
n(1≤n≤1000) 。
输出
输出只有一行(这意味着末尾有一个回车符号),包括 1 个整数。
样例
输入复制
100
输出复制
5050
#include<iostream>
#include<iomanip>
using namespace std;
int func(int i,int n,int sum);
int main()
{
int n;
cin>>n;
cout<<func(1,n,0);
return 0;
}
int func(int i,int n,int sum)
{
if(i>n) return sum;
return func(i+1,n,sum+i);
}
小丽找数
问题描述
小丽同学想在 1∼n 中找出这样的数,这个数的各个位的和不能被 2 整除也不能被 5 整除,比
如 3、12、25、30、1003、12、25、30、100 。这些数都满足各个位的和不能被 2 和 5 整除。
请你编程找出 1∼n 中这些数有多少个?
输入
一个整数n(n≤9999)。
输出
1∼n 中满足条件的数的个数。
#include<iostream>
#include<iomanip>
using namespace std;
int func(int i,int cnt);
int n;
int main()
{
cin>>n;
cout<<func(1,0);
return 0;
}
int func(int i,int cnt)
{
if(i>n) return cnt;
int sum = 0;
int tmp = i;
while(tmp!=0)
{
sum = sum + tmp%10;
tmp = tmp/10;
}
if(sum%2!=2 && sum%5!=0)
{
return func(i+1,cnt+1);
}
else
{
return func(i+1,cnt);
}
}
数字直角(1)
问题描述
请打印 n 行的数字直角三角形。
输入
一个整数 n<10。
输出
输出如下方图所示
n 行的数字直角三角形。
输入复制
3
输出复制
1
22
333
#include<iostream>
#include<iomanip>
using namespace std;
void func(int i);
int n;
int main()
{
cin>>n;
func(1);
return 0;
}
void func(int k)
{
if(k>n) return;
for(int i = 0;i<k;i++)
{
cout<<k;
}
cout<<endl;
func(k+1);
}
请输出n~1之间所有的整数
问题描述
从键盘读入一个整数n ,请输出n∼1 之间所有的整数,每行输出 1 个。比如,假设读入n=5 ,输出结果如下:
5
4
3
2
1
输入
一个整数n 。
输出
输出n∼1 之间所有的数,每行 1 个。
样例
输入复制
5
输出复制
5
4
3
2
1
#include<iostream>
#include<iomanip>
using namespace std;
void func(int i);
int n;
int main()
{
cin>>n;
func(n);
return 0;
}
void func(int k)
{
if(k==0) return;
cout<<k<<endl;
func(k-1);
}
求100+97+……+4+1的值
问题描述
求 100+97+⋯+4+1 的值。
输入
无。
输出
输出一行,即求到的和。
#include<iostream>
#include<iomanip>
using namespace std;
int func(int k,int sum);
int main()
{
func(100,0);
return 0;
}
int func(int k,int sum)
{
if(k>0) return sum;
func(k-3,sum+k);
cout<<sum;
}
数字直角(2)
问题描述
请打印 n 行的数字直角三角形。
输入
一个整数 n<10。
输出
输出如下方图所示
n 行的数字直角三角形。
输入复制
3
输出复制
1
12
123
#include<iostream>
#include<iomanip>
using namespace std;
void func(int i);
int n;
int main()
{
cin>>n;
func(1);
return 0;
}
void func(int k)
{
if(k>n) return;
for(int i = 0;i<k;i++)
{
for(int j = 1;j<i;j++)
{
cout<<j;
}
}
cout<<endl;
func(k+1);
}
求整数位数
题目描述
求任意正整数的位数。比如16是两位数,3696是四位数等
输入:一个整数
输出:这个整数的位数
输入案例:
45109
输出案例:
5
#include<iostream>
#include<iomanip>
using namespace std;
int func(int i,int x);
int n;
int main()
{
cin>>n;
cout<<func(1,0);
return 0;
}
int func(int i,int x)
{
if(i>n) return x;
int sum = 0;
int tmp = i;
while(tmp!=0)
{
x++;
sum = sum + tmp%10;
tmp = tmp/10;
}
}

5399

被折叠的 条评论
为什么被折叠?



