我明天准备面试 - 我需要这个问题的答案:
如何打印1到10&通过使用单变量递归
来获得10到1答案 0 :(得分:12)
void print_recursive(int n) {
printf("%d\n", n);
if (n < 10)
print_recursive(n+1);
printf("%d\n", n);
}
答案 1 :(得分:8)
仅使用一个功能和一个变量:
void recurs(int num) {
printf("%d\n", num);
if (num < 10) {
recurs(num + 1);
}
printf("%d\n", num);
}
int main() {
recurs(1);
return 0;
}
答案 2 :(得分:7)
你应该能够自己解决这个问题。
提示:创建一个以10
为参数的方法,然后打印参数并使用9
调用自身。
答案 3 :(得分:7)
我将被推崇,我只知道它,但这是(a)解决方案。不是最好的,但你应该能够让自己变得更好。
class Program
{
static void Main(string[] args)
{
printNumDown(10);
}
static void printNumDown(int num)
{
Console.WriteLine(num.ToString());
if (num > 1)
printNumDown(num - 1);
else
printNumUp(num + 1);
}
static void printNumUp(int num)
{
Console.WriteLine(num.ToString());
if (num < 10)
printNumUp(num + 1);
}
}
答案 4 :(得分:3)
这是一种偷偷摸摸的方式:
#include <stdio.h>
static void recur_up (int n) {
if (n > 1)
recur_up (n - 1);
printf ("%d\n", n);
}
static void recur_down (int n) {
printf ("%d\n", n);
if (n > 1)
recur_down (n - 1);
}
int main (void) {
recur_up (10);
recur_down (10);
return 0;
}
生成:
1
2
3
4
5
6
7
8
9
10
10
9
8
7
6
5
4
3
2
1
由于你可以通过一个功能实现这一目标,因此它会更加优雅:
static void recur_both (int n) {
printf ("%d\n", n);
if (n > 1)
recur_down (n - 1);
printf ("%d\n", n);
}
答案 5 :(得分:3)
Javascript版本:
printNumber(1);
function printNumber(num){
document.write(num);
if (num < 10)
printNumber(num + 1);
document.write(num);
}
答案 6 :(得分:2)
你们为什么都这么难?在伪代码中:
function recurfunc(n) {
if (n < 10) {
echo (-1 * (floor(abs(n)) - 10));
recurfunc(n+1);
}
}
然后以-9.5作为开始调用recurfunc。
对我来说似乎很明显,答案是使用绝对值。
答案 7 :(得分:0)
这是Ruby中的一个:
puts (r = ->n=1 { if n<=10 then [n] + r.(n+1) + [n] else [] end }).()
注意:在你断定Ruby是一个比Perl更糟糕的难以理解的混乱之前,让我向你保证:这是不是惯用的Ruby。惯用Ruby更像是
def recursive_count_up_and_down(n=1)
return [] unless n<=10
[n] +
recursive_count_up_and_down(n + 1) +
[n]
end
puts recursive_count_up_and_down
当然,Ruby是一种命令式语言,所以真的惯用它不会使用递归:
1.upto(10) do |i| puts i end
10.downto(1) do |i| puts i end
这是另一个不幸的是不使用递归的整洁的:
puts Array.new(20) {|i| if i < 10 then i+1 else 20-i end }
BTW:迄今为止所有解决方案,包括我的解决方案实际上都是作弊,因为从技术上讲,他们使用两个变量,因为
function foo {}
相当于
var foo = λ{}
因此,在上面的示例中,有两个变量:recursive_count_up_and_down
和n
。我们可以通过以默认的无点样式(例如在SK演算中)来消除这两者,但我会将其作为练习留给读者。 (意思是我无法弄清楚:-))
答案 8 :(得分:-1)
#include<stdio.h>
void c(int n)
{
static int i;
if(i<n)
{
i++;
printf("%d",i);
c(n);
}
}
int main()
{
c(5);
}
答案 9 :(得分:-1)
import java.util.Scanner;
public class PrintNumberFrom1To10 {
public static void printNumber(int num){
if(num<=10){
System.out.println(num);
printNumber(num+1);
}
}
public static void main(String[] args) {
System.out.println("Enter Your Number: ");
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
printNumber(num);
}
}