编写一个函数实现n^k,使用递归实现
输入
输入为一行,给出n和k的值
输出
输出为一行,给出n^k的结果
样例输入
4 2
样例输出
16
分析思路(从后往前推):
假设n=4,k=5
#include <iostream>
using namespace std;
int f(int n ,int k){
if (k == 1){
return n;
}
return n*f(n,k-1);
}
int main(){
int n,k;
cin >> n >> k;
cout << f(n,k) << endl;
}
使用递归的方式,倒序输出一个正整数
输入
输入为一行,给出一个整数
输出
输出为一行,输出整数倒序的结果
样例输入
456789
样例输出
987654
分析思路:
1.取出整数的个位数,将剩下的数字进行递归
2.当剩下的数小于10时,递归停止,并继续输出
#include <iostream>
using namespace std;
void f(int n){
cout << n % 10 ;
if (n > 10){
f (n / 10);
}
}
int main(){
int n;
cin >> n;
f(n);
}
给定一个非负整数 num,反复将各个位上的数字相加,直到结果为一位数。
输入: 38
输出: 2
解释: 各位相加的过程为:3 + 8 = 11, 1 + 1 = 2。 由于 2 是一位数,所以返回 2。
分析思路
1.取出每一位数进行相加
2.判断相加的结果是否大于10,如果大于10,则继续递归,否则直接退出
#include <iostream>
using namespace std;
int f(int n){
int s = 0;
while (n >= 10){
s += n %10;
n /= 10;
}
s += n;
if ( s >= 10){
return f(s); //如果大于10,则继续递归
}else{
return s; //如果小于10,则直接得出答案
}
}
int main(){
int n;
cin >> n;
cout << f(n);
}
法国数学家爱德华·卢卡斯曾编写过一个印度的古老传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针。印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的64片金片,这就是所谓的汉诺塔。不论白天黑夜,总有一个僧侣在按照下面的法则移动这些金片:一次只移动一片,不管在哪根针上,小片必须在大片上面。僧侣们预言,当所有的金片都从梵天穿好的那根针上移到另外一根针上时,世界就将在一声霹雳中消灭,而梵塔、庙宇和众生也都将同归于尽。
汉诺塔问题
给出一个整数n,代表有n个纸片,有三根柱子:A、B、C
输出每一次纸片移动时,起始和结束的柱子编号
汉诺塔问题
问题分析:
假设有2个盘子,从上到下依次编号1,2
1.先把1放到B
2.再把2放到C
3.再把1放到C,完成移动
问题分析:
假设有3个盘子,从上到下依次编号1,2,3
1.先把1,2放到B
2.再把3放到C
3.再把1,2放到C,完成移动
#include <iostream>
using namespace std;
void hanota(int n,char from,char temp,char to){
if (n > 0){
hanota(n-1,from,to,temp);
cout << from << "->" << to << endl;;
hanota(n-1,temp,from,to);
}
}
int main(){
hanota(3,'A','B','C');
}
答案与结果